我的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"。关于密钥存在的几个问题可能是相同的,但我仍然不理解我如何使用返回作为条件或如何处理它。 非常感谢您的帮助。
答案 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之类的东西被返回后,可以用来链接方法的承诺中有任何东西
希望这会帮助你