Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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 如果在Firebase快照内部不工作_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 如果在Firebase快照内部不工作

Javascript 如果在Firebase快照内部不工作,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我编写了以下代码来检查两个用户是否在一个房间内: useffect(()=>{ var chatroom=db.collection('test')。其中(“用户”,“数组包含”,“${selectedUser}”); chatroom.get().then(快照=>{ snapshot.forEach(doc=>{ if(doc.data().Users.includes(用户名)和&doc.data().Users.includes(selectedUser)){ console.log(“

我编写了以下代码来检查两个用户是否在一个房间内:

useffect(()=>{
var chatroom=db.collection('test')。其中(“用户”,“数组包含”,“${selectedUser}”);
chatroom.get().then(快照=>{
snapshot.forEach(doc=>{
if(doc.data().Users.includes(用户名)和&doc.data().Users.includes(selectedUser)){
console.log(“找到匹配项”);
等
设置消息(对象);
}
否则{
log(“没有找到有效的聊天记录”);
setMessages([]);
}
控制台日志(“???”);
})
});
},[username,selectedUser]);
当if条件成功时,它可以正常工作。但是,如果条件为false,则else将不会执行,甚至console.log(“?”)也不会运行。我不确定是什么原因造成的

编辑:通过添加一个布尔值来表示是否找到匹配项,我找到了一个解决方法。快照之外的代码仍然在运行,所以我只是把东西移到了那里


Edit2:实际上这不起作用,因为我忘了javascript只会在检索数据之前运行底部的代码。

根据问题的评论线索将此作为社区Wiki答案发布。请随时更新和更改更多细节


正如@Craig所告知的,解决方案是遵循第一次编辑的想法。通过使用与
async
await
相结合的两个函数,可以在异步函数中包装快照,然后
await
Firebase查询。返回数据后,可以检查是否找到布尔值,以确认是否找到匹配项。

根据问题的注释线索将此作为社区Wiki答案发布。请随时更新和更改更多细节


正如@Craig所告知的,解决方案是遵循第一次编辑的想法。通过使用与
async
await
相结合的两个函数,可以在异步函数中包装快照,然后
await
Firebase查询。返回数据后,可以检查是否找到布尔值,以确认是否找到匹配项。

如果您尝试替代“else”,则可以编写另一条if语句。如果(!doc.data()。是否可以等待整个快照,然后在聊天室后等待我的代码。get()在完成之前不会执行?是否会引发任何错误?@L.Papadopoulos No errors nothing。我似乎不知道这里到底发生了什么。@L.Papadopoulos好的,所以我设法用edit#1中提到的想法和async/await解决了这个问题,我只是将它包装在一个异步函数中,然后等待firebase查询。然后我检查一个布尔值,看看我是否得到了它。也许,如果你试着代替“else”,写另一个if语句。如果(!doc.data()。是否可以等待整个快照,然后在聊天室后等待我的代码。get()在完成之前不会执行?是否会引发任何错误?@L.Papadopoulos No errors nothing。我似乎不知道这里到底发生了什么。@L.Papadopoulos好的,所以我设法用edit#1中提到的想法和async/await解决了这个问题,我只是将它包装在一个异步函数中,然后等待firebase查询。然后我检查一个布尔值,看看我是否得到了它。