javascript - 当 Firestore.getAll(...promises) 因拒绝而停止时如何 "control"

标签 javascript node.js firebase google-cloud-firestore google-cloud-functions

上下文:

我正在做一个云功能来向多个用户发送推送。我需要恢复每个用户的信息以了解一些数据,例如姓名、国家/地区等。

问题:

实际上,我恢复了用户 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{
         ......
      }
   }
})

这个解决方案实际上几乎一直“正常”工作。但此时 Firestore 数据库有一些用户不存在或出现问题,因为方法 getAll() 在完成所有 promise 之前停止。我知道是因为没有发送推送,并且在控制台中只是说该方法已完成。

阅读 SO 和文档,我看到,如果某些 promise 被“破坏”, getAll 就会停止。 (全有或全无)

这就是我迷路的地方。我怎样才能“强制”或以其他方式做,只是“跳过”这个无法完成的 promise ?

附注:

我尝试用“for”来做,但它似乎省略了一些 promise :

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));

在我的数据库中,我有“test/test”和“test/doc”文档,但没有“test/test1”,结果如下所示:

enter image description here

所以我们只是在不存在的文档上得到undefined,仅此而已。我建议添加catch,看看是否有异常。当我编写测试时,该函数因内部函数中的拼写错误而中断。

希望这会有所帮助!

关于javascript - 当 Firestore.getAll(...promises) 因拒绝而停止时如何 "control",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59785288/

相关文章:

javascript - Uncaught ReferenceError : loadImage is not defined

javascript - $.when() : how to use it?

javascript - 在 js 中的原型(prototype)继承期间,当我尝试访问继承对象的方法时,我变得不确定

javascript - 检测 VSCode 中未使用的 JavaScript 方法

javascript - Node.js EventEmitter `on` 事件未响应 `emit` 操作

JavaScript 自动完成插件 - 如何排除对象中的参数?

node.js - 排序时流式传输大数据

ios - Swift Firebase snapshot.allValues 更新

ios - Firebase - 当您不知道父键的值时访问子节​​点 - 由 childByAutoId() 生成

firebase - 管理 FCM 设备组