javascript - Firebase +节点JS同步错误?
问题描述
我的节点 js 代码如下
for(v in sna.val()){
console.log("each"+va);
console.log(v);
var fourthRef=ref.child(val+'/reservation/'+va+"/"+v);
fourthRef.once('value').then((sn)=>{
console.log(v);
console.log("second val")
});
问题是...fourthRef 只搜索最后一个 da086aee-3ebf-4684-b91b-53af49fe6d84 节点,忽略 599b04e8-5731-4ea1-a326-69a7bca2e937 节点。
日志如下。正如您在第二个 val 之前看到的值,只搜索 da086aee-3ebf-4684-b91b-53af49fe6d84 之一。
each0CB2B77BB2BB
599b04e8-5731-4ea1-a326-69a7bca2e937
each0CB2B77BB2BB
da086aee-3ebf-4684-b91b-53af49fe6d84
da086aee-3ebf-4684-b91b-53af49fe6d84
second val
da086aee-3ebf-4684-b91b-53af49fe6d84
second val
解决方案
once()
是异步的,这意味着它不会阻止您的循环等待它返回结果。查询的结果会在一段时间后发生,并且可以在then()
立即返回的 promise 的回调中使用once()
。
您的循环有效地同时启动了多个查询,但并没有真正等待其中任何一个完成。每个查询的结果都会在循环完成后出现。无论你想做什么,你都必须重写这段代码,或者做一些正确使用由 once() 返回的承诺的事情。
推荐阅读
- angular - mat-autocomplete 始终显示与 Akita 相同的名称
- php - 在 Laravel 5.6 多关系设置中添加逻辑的位置
- java - 是否可以将自定义 ArrayList 转换为字节数组?
- android - Arduino/Android 蓝牙延迟
- android - 无法从 datasnapshot 对象的 firebase 检索数据
- facebook - 如何通过 Facebook Id 获取用户个人资料图片 URL?
- asp.net - 使用本地 SQL Server 的连接字符串
- xml - 如何使用 Notepad++ 搜索和替换 XML 节点中的特定属性
- python - 用户警告:Pandas 不允许通过新属性名称创建列
- c# - 将 LINQ 存储过程转换为 DataSet