2017-06-22 4 views
-1

In diesem Code ich die posSnapshot.val().case und speichern sie in der tatarget var erhalten möchten, für das ich die dbCall() Funktion VOR console.log('TARGETOUT', tatarget)Firebase asynchrone Datenbank

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); 
}); 

Mein Problem, dass die NACH dbCall() Funktion Ende ausführen müssen die console.log!

Ich versuchte jedes Versprechen, jeder Callback-Funktionen, ich versuchte auch async und await aber Firebase nicht damit umgehen.

Ich arbeitete für diesen Teil des Codes für mehr als 15 Stunden.

Kann mir jemand helfen?

Danke!

Antwort

0

Diese immer besser organisiert werden könnte, aber im Grunde Sie:

  1. Rückkehr der Firebase ref Versprechen von dbCall()
  2. Warten, bis das Versprechen mit then()
  3. Führen Sie die gewünschte Funktionalität
  4. resolve Ihr Versprechen, denn loopPromise ist ein Versprechen

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); 
}