#javascript #google-cloud-firestore
#javascript #google-cloud-firestore
Вопрос:
Я получаю указанную выше ошибку, когда пытаюсь использовать Firestore
для получения данных — я пытаюсь извлечь токены из своей базы данных, чтобы я мог отправлять сообщения:
exports.getUsers = functions.https.onRequest(async (req, res) => {
db.collection("users")
.get()
.then(snapshot => {
let registrationTokens = [];
snapshot.forEach(doc => {
let id = doc.id;
registrationTokens.push(id);
});
});
console.log(registrationTokens);
const message = {
data: { title: "Testing", body: "Test" },
tokens: registrationTokens
};
messaging.sendMulticast(message).then(response => {
console.log(response.successCount " messages were sent successfully");
});
});
Комментарии:
1. Вы объявляете
registrationTokens
usinglet
, поэтому он не будет доступен за пределами этого блока. Кроме того, ваше обещание отклоняется, и нетcatch
блока для обработки отклоненных обещаний. Цепочкаcatch
кthen
.
Ответ №1:
Вы объявили registrationTokens внутри обещания, поэтому оно не отображается за его пределами:
exports.getUsers = functions.https.onRequest(async (req, res) => {
db.collection("users")
.get()
.then(snapshot => {
let registrationTokens = [];
snapshot.forEach(doc => {
let id = doc.id;
registrationTokens.push(id);
});
console.log(registrationTokens);
// process the tokens
const message = {
data: { title: "Testing", body: "Test" },
tokens: registrationTokens
};
messaging.sendMulticast(message).then(response => {
console.log(response.successCount " messages were sent successfully");
});
});
});
Вы должны помнить, что обещание выполняется асинхронно, поэтому вам нужно дождаться появления результатов.