2017-07-14 7 views
0

ich eine Funktion auf meiner Feuerbasis Cloud-Funktion habe, die überprüfen verwendet, wenn der Schlüssel vorhanden ist oder nicht:Firebase Return Boolean auf Funktion als Bedingung

function inDB(path, k){ 
    var exists; 
    var query = ref.child(path).orderByKey(); 
    var promise = query.once("value").then(function (snapshot) { 
     if(snapshot.hasChild(k.toString())) exists = true; 
     else exists = false; 
     return exists; 
    }); 
    return promise; 
    //return exist; 
} 

Wie verwende ich seine Rückkehr als Bedingung wie wenn oder während, dh:

var r = 0; 
do{ 
    r = randomInt(0,2); 
} while(inDB('/Numbers/',r)); 
ref.child('/Numbers/'+r).set("value"); 

Ich bemerkte, dass ich eigentlich warten muss, erfüllt zu erfüllen. Wenn ich inDB-Funktion ausführen, kehrte es mit "undefined" zurück. Mehrere Fragen können die gleichen sein wie Schlüssel existiert, aber ich verstehe immer noch nicht, wie ich die Rückkehr als Bedingung oder wie damit umgehen. Vielen Dank für alle Hilfe.

Antwort

0

Wie wäre es mit Ihnen die Methode Unterschrift Callback empfangen?

function inDB(path, k, callback){ 
    var exists; 
    var query = ref.child(path).orderByKey(); 
    var promise = query.once("value").then(function (snapshot) { 
     if(snapshot.hasChild(k.toString())) exists = true; 
     else exists = false; 
     callback(exists); 
     return exists; 
    }); 
    return promise; 
} 

und nennen Sie es wie

var a = function(exists){ 
    r = randomInt(0,2); 
    if(r%2==0 && !exists){//or some logic you want to call inDB again 
     inDB('/Numbers/',r, a)); 
    } 
} 
inDB('/Numbers/',r, a)); 

ich nicht sicher bin, ist es der richtige Weg, es zu tun oder nicht oder gibt es eine Sache, in dem Versprechen, dass Ketten Verfahren verwendet werden kann, nachdem etwas wurde zurückgegeben wie doOnNext in RxJava

hoffentlich wird dir dies helfen