У меня есть следующая структура в firestore.
• разговоры - {convid}
• пользователи - {userid} - устройства - {deviceids}
Таким образом, случай использования всегда новое сообщение отправляется пользователем, запускаемая облачная функция проверяет автономный массив, содержащий идентификаторы пользователей всех автономных пользователей в группе.
Теперь при повторении и последующей отправке pu sh автономным пользователям Итерация показывает только несколько запросов к пользователю по последнему индексу массива в for l oop.
Функция журналов в облаке:
Массив автономных пользователей: => [ '919XXXXX5565', '919XXXXX9334', '9190XXXXX608', '919XXXXX1818', '919XXXXX9974', '9197XXXXX661', '9181XXXXX854']
2: 56: 22,043 AM Текущий идентификатор пользователя: 919XXXXX5565
2: 56: 22.044 AM Текущий идентификатор пользователя: 919XXXXX334
2: 56: 22.044 AM Curr идентификатор пользователя ent: 9190XXXXX608
2: 56: 22.044 AM идентификатор текущего пользователя: 919XXXXX1818
2: 56: 22.044 AM идентификатор текущего пользователя: 919XXXXX9974
2: 56: 22.044 AM Текущий пользователь: 9197XXXXX661
2: 56: 22.044 AM Текущий пользователь: 9181XXXXX854
2: 56: 22.046 AM Успешно подготовленный список токенов false
2: 56: 22.151 AM Выполнение функции заняло 5097 мс, завершено со статусом: 'ok'
2: 56: 22.188 AM Нет соответствующих документов. for => 9181XXXXX854
2: 56: 22.190 AM Нет соответствующих документов. for => 9181XXXXX854
2: 56: 22.229 AM Нет соответствующих документов. for => 9181XXXXX854
2: 56: 22.231 AM Нет соответствующих документов. for => 9181XXXXX854
2: 56: 22.233 AM Нет соответствующих документов. for => 9181XXXXX854
2: 56: 22.237 AM Нет соответствующих документов. для => 9181XXXXX854
Мой код
var outputList = [];
var promises = [];
return admin.firestore().collection('conversations').doc(conversationDocId).get();
.then(document =>{
let offline = []
if(!document.exists){
return false;
} else{
try{
offline = document.data().offline;
console.log("The array of offline users is =>", offline);
}catch(offlineError){
console.error("offline array does not exist" + offlineError);
}
for(uid of offline) {
console.log("Current user id: " + uid);
let promise = admin.firestore().collection("users").doc(uid).collection('devices').get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents. for =>', uid);
}
snapshot.forEach(doc => {
try {
token = doc.data().rt
outputList.push(token);
} catch (tokenfetcherror) {
console.error("unable to fetch token for =>", uid);
}
});
return;
}).catch(errtoken => {
console.error('Error getting documents', errtoken);
});
promises.push(promise);
}
Promise.all(promises).then(() => {
return outputList;
}).catch(err => {
return err;
})
}
return false;
})
Я выбрал это из { ссылка }