内容:
我正在执行云功能以将推送发送给多个用户。我需要恢复每个用户的信息,以了解一些数据,例如姓名,国家/地区等。
问题:
实际上,我恢复了用户ID的列表,当我得到它时,我创建了一个promises
数组来恢复所有信息:
var usersPromises = []
for (var i = 0; i < usersInRange.length; i++) {
usersPromises[i] = firestore.collection("users").doc(usersInRange[i])
}
然后,我恢复并使用
firestore.getAll()
发送推送:firestore.getAll(...usersPromises).then(results => {
for(snapshot in results){
if(snapshot.exists){
......
var user = snapshot.data()
......
}else{
......
}
}
})
实际上,该
solution
几乎一直都在“正常”运行。但是此时,Firestore数据库中的某些用户不存在或出了点问题,因为getAll()
方法在完成所有承诺之前就停止了。我知道这是因为没有发送推送,并且在控制台中只需说该方法已完成即可。阅读SO和文档,我发现,如果某些承诺被“破坏”,则getAll将停止。 (全部或全部)
这是我迷路的地方。我如何“强迫”或以另一种方式仅仅“跳跃”这一无法完成的承诺?
附言:
我尝试使用“ for”,但似乎省略了一些承诺:
for (var i = 0; i < usersPromises.length; i++) {
usersPromises[i]
.get()
.then(snapshot => {
if(snapshot.exists){
......
var user = snapshot.data()
......
}else{
......
}
})
}
最佳答案
我认为这不是getAll
的问题。我已经测试过了:
const firestore = new Firestore();
let doc = []
doc[0] = firestore.doc('test/test');
doc[1] = firestore.doc('test/test1');
doc[2] = firestore.doc('test/doc');
firestore.getAll(...doc)
.then(result=> result.forEach(doc => console.log(doc._fieldsProto)))
.catch(err=>console.log(err));
在我的数据库中,我有“测试/测试”和“测试/文档”文档,但没有“测试/测试1”,结果如下所示:
因此,我们仅在不存在的文档上得到
undefined
,仅此而已。我建议添加catch
并查看是否有任何异常。当我编写测试时,该函数被内部函数中的拼写错误中断。我希望这个能帮上忙!