【发布时间】:2019-09-08 20:24:51
【问题描述】:
我正在开发 FCM,需要频道/房间中所有成员的设备令牌来发送推送通知,并且每个成员都有多个设备,为此我需要两个 for 循环。
我正在使用 async/await 和 firestore 查询,但它不等待结果,在后台处理它并移至需要结果数据的下一条语句。
const notification = async (channelId) => {
let tokens = []
const members = await db.collection('channels/' + channelId + '/members').get();
await members.forEach(async (member) => {
const deviceTokens = await db.collection('users/' + member.id + '/devices').get();
await deviceTokens.forEach(async (token) => {
console.log(token.id);
await tokens.push(token.data().token);
})
})
console.log(tokens);
return await sendPush(tokens); // calling other functions
}
我希望输出是tokens = ['token1', 'token2', 'token3'],但实际输出是tokens = []
【问题讨论】:
-
@estus 我询问了嵌套 forEach 请看一下
-
我也被这个问题困扰,但没有找到任何解决方案。
-
@Umar 是否嵌套都没关系。您不应该将 forEach 与 async/await 一起使用,这就是重点,这在 dupe question 中进行了解释。
-
我目前不使用 Firebase,无法检查它是否可行。我发布了一个答案。希望这会有所帮助。
标签: node.js callback async-await firebase-cloud-messaging google-cloud-functions