2017-06-22 154 views
-1

在这段代码我想要得到的posSnapshot.val().case并将其存储在tatarget VAR,为了这个,我需要执行dbCall()功能之前console.log('TARGETOUT', tatarget)火力地堡异步数据库

function dbCall() { 

    var toReturn; 

    return admin.database().ref().child('games/' + event.params.gameId + '/player1/boats').once('value').then(function(snapshot) { 

     snapshot.forEach(function(typeSnapshot) { 

      typeSnapshot.forEach(function(posSnapshot) { 

       console.log('POSKEY', posSnapshot.key); 

       if(posSnapshot.key != 'status') { 

        console.log(rngPos, incr, posSnapshot.val().state); 

        if(rngPos == incr && posSnapshot.val().state == 0) { 

         console.log('==='); 

         return(posSnapshot.val().case); 
        } 
        else if(rngPos == incr && posSnapshot.val().state == 1) { 

         return('1'); 
        } 

        incr ++; 
       } 
      }); 
     }); 
    }); 
} 

var loopPromise = new Promise(function(resolve, reject) { 

    DD = dbCall(); 

    tatarget = DD.then(function(dbResult) { 

     console.log(dbResult); 

     return dbResult; 
    }); 

    console.log('TARGETOUT', tatarget); 

    console.log('TARGETRESOLVE', tatarget); 

    resolve(tatarget); 
}); 

loopPromise.then(function(loopResult) { 

    console.log(loopResult); 
}); 

我的问题是,dbCall()功能结束后, console.log

我试过每个承诺,每个回调函数,我也试过asyncawait,但Firebase不处理它。

我工作了超过15小时的这部分代码。

有人能帮助我吗?

谢谢!

回答

0

这总是可以被组织更好,但基本上你:

  1. 返回从dbCall()
  2. 等待的Firebase ref承诺对承诺与then()
  3. 执行您想要的功能
  4. resolve你的诺言,因为loopPromise是承诺

function dbCall() { 

    var toReturn; 

    return admin.database().ref().child('games/' + event.params.gameId + '/player1/boats').once('value'); 
} 

var loopPromise = new Promise(function(resolve, reject) { 

    dbCall().then(function(snapshot) { 

     snapshot.forEach(function(typeSnapshot) { 

      typeSnapshot.forEach(function(posSnapshot) { 

       console.log('POSKEY', posSnapshot.key); 

       if(posSnapshot.key != 'status') { 

        console.log(rngPos, incr, posSnapshot.val().state); 

        if(rngPos == incr && posSnapshot.val().state == 0) { 

         console.log('==='); 

         resolve(posSnapshot.val().case); 
        } 
        else if(rngPos == incr && posSnapshot.val().state == 1) { 

         resolve('1'); 
        } 

        incr ++; 
       } 
      }); 
     }); 

     print(dbResult); 
    }); 
}); 

loopPromise.then(function(loopResult) { 
    console.log(loopResult); 
}); 

function print(tatarget) { 
    console.log('TARGETOUT', tatarget); 
    console.log('TARGETRESOLVE', tatarget); 
}