Контекст:
Я выполняю облачную функцию для отправки толчков нескольким пользователям. Мне нужно восстановить информацию о каждом пользователе, чтобы знать некоторые данные, такие как, имя, страна .. и т.д. c ..
Проблема:
На самом деле я восстанавливаю список идентификаторов пользователей и когда я его получил, я создаю массив promises
для восстановления всей информации:
var usersPromises = []
for (var i = 0; i < usersInRange.length; i++) {
usersPromises[i] = firestore.collection("users").doc(usersInRange[i])
}
Затем я восстанавливаю и отправляю pu sh, используя firestore.getAll()
:
firestore.getAll(...usersPromises).then(results => {
for(snapshot in results){
if(snapshot.exists){
......
var user = snapshot.data()
......
}else{
......
}
}
})
Этот solution
фактически работает "нормально" почти все время. Но в этот момент в базе данных Firestore есть некоторые пользователи, которых не существует или что-то не так, потому что метод getAll()
останавливается перед выполнением всех обещаний. Я знаю это, потому что pu sh не отправляется, и в консоли просто скажите, что метод завершен.
Читая в SO и документации, я увидел, что getAll останавливается, если какое-то обещание «нарушается» , (все или ничего)
И вот где я потерялся. Как я могу «заставить» или сделать по-другому, чтобы просто «прыгнуть» это обещание, которое не может быть выполнено?
PS:
Я пытался сделать с "для", но кажется, что некоторые обещания опущены:
for (var i = 0; i < usersPromises.length; i++) {
usersPromises[i]
.get()
.then(snapshot => {
if(snapshot.exists){
......
var user = snapshot.data()
......
}else{
......
}
})
}