首页 > 解决方案 > Firebase +节点JS同步错误?

问题描述

Firebase 节点就像图片。

我的节点 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

标签: javascriptfirebasefirebase-realtime-database

解决方案


once()是异步的,这意味着它不会阻止您的循环等待它返回结果。查询的结果会在一段时间后发生,并且可以在then()立即返回的 promise 的回调中使用once()

您的循环有效地同时启动了多个查询,但并没有真正等待其中任何一个完成。每个查询的结果都会在循环完成后出现。无论你想做什么,你都必须重写这段代码,或者做一些正确使用由 once() 返回的承诺的事情。


推荐阅读