我的节点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
答案 0 :(得分:0)
once()
是异步的,这意味着它不会阻止你的循环等待它返回结果。查询的结果会在一段时间后发生,并且可以在then()
立即返回的承诺的once()
回调中提供。
你的循环有效地同时启动了几个查询,但并没有真正等待它们中的任何一个完成。每个查询的结果都在循环结束后进入。无论你想做什么,你都必须重写这段代码,或者做一些正确使用once()返回的promise的东西。