Firebase返回函数作为条件的布尔值

时间:2017-07-14 04:30:02

标签: javascript node.js firebase

我的firebase云功能有一个功能,用于检查密钥是否存在:

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或while,即:

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

我注意到实际上我需要等待承诺履行。当我运行inDB函数时,它返回" undefined"。关于密钥存在的几个问题可能是相同的,但我仍然不理解我如何使用返回作为条件或如何处理它。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分: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));

我不确定这是否是正确的方法 或者在RxJava中的doOnNext之类的东西被返回后,可以用来链接方法的承诺中有任何东西

希望这会帮助你