Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谁能告诉我为什么显示数组为空?_Javascript_Node.js_Google Cloud Firestore_Google Cloud Functions_Firebase Cloud Messaging - Fatal编程技术网

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循环可以很好地处理异步调用:)

干杯