2017-07-14 27 views
0

我有我的火力點雲功能的函數,用來檢查鍵的存在與否:火力地堡返回布爾的功能條件

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

如何使用它作爲條件回報如if或同時,即:

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

我注意到實際上我需要等待承諾實現。當我運行inDB函數時,它返回「undefined」。關鍵是存在幾個問題可能是相同的,但我仍然不明白我如何使用返回作爲條件或如何處理這個。 非常感謝您的幫助。

回答

0

你如何使方法簽名接收回調?

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

,並調用它像

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

我不知道這是正確的方式做到這一點還是不 或者是那裏的承諾,之後就可以用鏈方法的任何事情東西被返回像Rx​​Java doOnNext

希望這會幫助你出