Javascript 如何在childsnapshot完成执行后调用函数

Javascript 如何在childsnapshot完成执行后调用函数,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想调用一个函数,一旦所有的子快照都执行完毕 进一步阐述: 我有一个数据集假设-kvbd…sd,它有两个子数据集 -kvbd…sd ---------->-fdvdv-…jh ---------->-fgshs..shsh 我想在两个子节点的处理完成后调用该函数 ---------->-fdvdv-…jh ---------->-fgshs..shsh 我的代码: dRef .once("value") .then (

我想调用一个函数,一旦所有的子快照都执行完毕

进一步阐述:

我有一个数据集假设-kvbd…sd,它有两个子数据集

-kvbd…sd ---------->-fdvdv-…jh ---------->-fgshs..shsh

我想在两个子节点的处理完成后调用该函数

---------->-fdvdv-…jh ---------->-fgshs..shsh

我的代码:

dRef
        .once("value")
            .then
              (
                function(snapshot)
                 {

                    snapshot.forEach(                                           
                    function(childsnapshot) 
                        {
                       var data=childsnapshot.val();
                       var Apdate=data.Dateval;                                       


                    for (i = 0; i < sel.options.length; i++)                        
                        {
                            var datein=sel.options[i].value;
                            console.log("check:"+datein);                                                        
                            if(datein==Apdate)                                                                                                                          
                            sel.options[i].disable = true;
                            console.log("Success:!!!!!!");                                                                                                              
                        }                                                       
                             pass();


                         }
                        }
                    }                       
                   );
dRef
.一次(“价值”)
.那么
(
功能(快照)
{
快照.forEach(
功能(儿童快照)
{
var data=childsnapshot.val();
var Apdate=data.Dateval;
对于(i=0;i
您可以通过
Promise
s尝试以下内容:

ref.once('value')
  .then(function(snapshot) {
    var myFunctToRunAfter = function () {
      console.info('RUN AFTER THE LOOP')
    }

    return new Promise(function(resolve, reject) {
      snapshot.forEach(function(child) {
        console.log('I am a child ' + child.val())
      })
      /* Call the function after the loop */
      resolve(myFunctToRunAfter())
    })
    .then(function() {
      /* I could do something here */
      console.log(snapshot.val())
      console.info('RUN LAST')
    })
  })
以下是一个工作示例:

var配置={
apiKey:“AIzaSyCDyoPVmi2rLIFtb55eTGYYPMsxFR3uuMs”,
authDomain:“test-514b2.firebaseapp.com”,
数据库URL:“https://test-514b2.firebaseio.com",
storageBucket:“test-514b2.appspot.com”,
messagingSenderId:“773249287825”
};
firebase.initializeApp(配置);
var ref=firebase.database().ref();
参考一次(“值”)
.then(功能(快照){
var myFunctToRunAfter=函数(){
console.info('在循环之后运行');
}
返回新承诺(功能(解决、拒绝){
snapshot.forEach(函数(子函数){
console.log('我是一个孩子'+child.val())
})
/*在循环之后调用函数*/
解析(myFunctToRunAfter())
})
.然后(()=>{
/*我可以在这里做点什么*/
console.log(snapshot.val())
console.info('RUN LAST')
})
})

我可以对主快照和子快照做出类似的承诺吗also@joel-我相信你能