Firebase +节点JS同步错误?

时间:2018-06-17 14:11:34

标签: javascript firebase firebase-realtime-database

Firebase node is like pic.

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

1 个答案:

答案 0 :(得分:0)

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

你的循环有效地同时启动了几个查询,但并没有真正等待它们中的任何一个完成。每个查询的结果都在循环结束后进入。无论你想做什么,你都必须重写这段代码,或者做一些正确使用once()返回的promise的东西。