当实时数据库中写入"邀请"时,我正在尝试向用户发送一些推送。
当云函数检测到邀请的创建被触发,并将用户列表恢复为已邀请(id(时。
获得此 ID 后,我必须恢复每个 id 的用户信息,以便获取语言、fcmToken 等信息。
阅读一些SO问题,我看到我必须创建对"呼叫"的引用,例如:
admin.database().ref(`/user/${userId}`).once('value')
然后将其存储在数组中并使用 Promise.all(( 调用
var userPromises = [];
for (var i = 0;i<usersInRange.length; i++) {
var userId = usersInRange[i];
userPromises[i] = admin.database().ref(`/user/${userId}`).once('value');
}
Promise.all(userPromises).then(results => {
...
})
这就是我需要帮助的地方。
我遇到了一些问题,因为如果 Promise.all(( 在检索某个用户时失败,它会停止,并且不读取其他 id。
有一种方法可以"一个接一个"地避免 Promise.all(( 停止?
在这里你可以找到一个类似的问题,已经回答了。总而言之,他们说您可以使用异步函数(如果可能的话(。另一种方法是使用循环。
function runSerial(tasks) {
var result = Promise.resolve();
tasks.forEach(task => {
result = result.then(() => task());
});
return result;
}
值得一看。