#javascript #firebase #google-cloud-firestore #google-cloud-functions #firebase-cloud-messaging
# #javascript #firebase #google-cloud-firestore #google-cloud-функции #firebase-cloud-messaging
Вопрос:
То, что я пытаюсь сделать, это запустить задание, когда в определенное время оно извлечет определенное поле из моего документа и отправит пользователю уведомление с использованием извлеченного содержимого.
Но проблема в том, что тело уведомления остается пустым. Я попытался войти, если все, что я извлекаю из документов, пусто или нет. Но, согласно журналам, в журналах переменная кавычек не пуста.
Пожалуйста, укажите мне, чего мне не хватает
exports.sendDailyQuotes = functions.pubsub.schedule('0 7 * * *').timeZone('Asia/Kolkata').onRun(async (context) => {
var today = new Date();
today.setDate(today.getDate() 1);
var currMonth = today.getMonth() 1;
var dateQry = today.getDate() "-" currMonth;
var quote;
admin.firestore().collection('quotes').doc(dateQry).get().then(snapper => {
quote = snapper.data().english;
return "";
}).catch(reason => {
console.log(reason);
});
var dailyQuote = {
notification : {
title : "Daily Quote",
body : quote, //This is staying empty
},
topic : 'notifications'
}
let response = await admin.messaging().send(dailyQuote);
console.log(response);
});
Ответ №1:
Вы неправильно используете promises при вызове Firestore. Вызов then
не приостанавливает код, как await
это происходит. Ваш код просто немедленно перейдет к вызову FCM, не дожидаясь завершения запроса.
Вместо этого вы должны снова использовать await, чтобы приостановить свой код для ожидания результата get()
.
const snapper = await admin.firestore().collection('quotes').doc(dateQry).get()
quote = snapper.data().english;
Если вы хотите перехватить ошибку при вызове, который возвращает обещание, вам следует использовать try / catch для использования await
.
Я настоятельно рекомендую потратить время на то, чтобы научиться эффективно использовать promises, иначе вы будете продолжать сталкиваться со странными ошибками, подобными этой, при реализации кода облачных функций.
Комментарии:
1. Спасибо, я действительно пытаюсь учиться, но иногда видео на YouTube и даже документация непонятны, поэтому я надеюсь, вы понимаете
2. Я собираюсь быть откровенным здесь — учебные пособия YouTube для продуктов Firebase не являются отличным способом изучения языков программирования. В руководствах обычно предполагается, что вы уже знаете язык. Я предлагаю сначала изучить JavaScript сам по себе, прежде чем пробовать что-то сложное в облачных функциях.
3. Еще раз спасибо за рекомендации