2017-02-09 5 views
1

Я хочу, чтобы вызвать функцию, когда все childsnapshots выполнили,Как вызвать функцию после childsnapshot завершения казни

Разрабатывая далее:

У меня есть набор данных предположим -kvbd ... сд, который имеет два детских наборов данных

-kvbd ... сд ----------> -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(); 


         } 
         } 
        }      
        ); 

ответ

1

Вы могли бы попробовать что-то подобное с Promise с:

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 config = { 
 
    apiKey: "AIzaSyCDyoPVmi2rLIFtb55eTGYYPMsxFR3uuMs", 
 
    authDomain: "test-514b2.firebaseapp.com", 
 
    databaseURL: "https://test-514b2.firebaseio.com", 
 
    storageBucket: "test-514b2.appspot.com", 
 
    messagingSenderId: "773249287825" 
 
}; 
 
firebase.initializeApp(config); 
 

 
var ref = firebase.database().ref(); 
 

 
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(() => { 
 
     /* I could do something here */ 
 
     console.log(snapshot.val()) 
 
     console.info('RUN LAST') 
 
    }) 
 
    })
<script src="https://www.gstatic.com/firebasejs/3.6.9/firebase.js"></script>

Codepen с таким же рабочим примером.

+0

Могу ли я получить аналогичное обещание по основному снимку и childsnapshot также –

+0

@ joel-meshak уверен, что вы можете –

Смежные вопросы