Javascript 谁能告诉我为什么显示数组为空?
我想向多个设备发送通知,为此,我通过查询文档并将令牌保存到数组来获取令牌,但它显示数组为空。最可能的错误是因为我无法在数组中添加元素 我的代码是:-Javascript 谁能告诉我为什么显示数组为空?,javascript,node.js,google-cloud-firestore,google-cloud-functions,firebase-cloud-messaging,Javascript,Node.js,Google Cloud Firestore,Google Cloud Functions,Firebase Cloud Messaging,我想向多个设备发送通知,为此,我通过查询文档并将令牌保存到数组来获取令牌,但它显示数组为空。最可能的错误是因为我无法在数组中添加元素 我的代码是:- var registrationTokens=[]; const indexOfSender=usersList.indexOf(chatItem.senderUsername); 让removedUsername=usersList.splice(indexOfSender,1)//从列表中删除发件人名称的步骤 usersList.forEac
var registrationTokens=[];
const indexOfSender=usersList.indexOf(chatItem.senderUsername);
让removedUsername=usersList.splice(indexOfSender,1)//从列表中删除发件人名称的步骤
usersList.forEach(异步(元素)=>{
const query=admin.firestore().collection('users')。其中(“username”,“==”,element);
const querySnapshot=wait query.get();
如果(querySnapshot.docs.length>0){
const doc=querySnapshot.docs[0];
const data=doc.data();
registrationTokens.push(data.androidNotificationToken);//在这里添加标记
}
否则{
log(“无法获取用户名的令牌”,元素);
}
});
常量消息=
{
通知:{
标题:"讯息",,
身体:身体,,
imageUrl:url,
},
代币:注册代币,
数据:{收件人:senderUserId},
};
admin.messaging().sendMulticast(消息)
。然后(响应=>
{
如果(response.failureCount>0){
常量失败次数=[];
response.responses.forEach((resp,idx)=>{
如果(!分别成功){
failedTokens.push(注册令牌[idx]);
}
});
log('导致失败的令牌列表:'+failedTokens);
}
其他的
{
console.log('成功发送消息',响应);
}
});代码>async
内部forEach
无法按预期方式工作。如果添加一些日志记录,您将看到循环在其任何异步工作完成之前结束,在将令牌数组传递给FCM之前将其保留为空。循环中的每次迭代只会生成一个未解决的承诺。您需要重写代码,以便在调用FCM之前真正等待所有这些承诺
请阅读更多关于此的信息:
for of循环可以很好地处理异步调用:)
干杯