如果我有这样的东西
const query = firebase.database().ref("/posts").orderByChild('postid').equalTo(1);
query.once('value', snapshot=>{
if(snapshot.val() == "XYZ"){
console.log("true");
return true;
}
});
console.log("false");
return false

为什么这个印刷是假的真实
如何在跳转到返回false之前强制等待查询的答案?
答案 0 :(得分:1)
根据您的评论,这可能是您想要做的:
const query = firebase.database().ref("/posts").orderByChild('postid').equalTo(1);
query.once('value', snapshot=>{
if (snapshot && (snapshot.val() === "XYZ")){
console.log("true");
// do something
}
else {
console.log("false");
// do something else
}
});
您需要检查快照是否为空。
注意,如果你的代码在一个返回值的函数中,它将无法以你期望的方式工作(即它总是返回false),因为查询是一个异步调用,所以在查询中执行你的逻辑
答案 1 :(得分:1)
任何查询都是承诺,您可以返回承诺。类似的东西:
const promise = query.once ... 返回Promise.all([promise])。
也许你不需要阵列而只是:
返回承诺;
此视频应有助于https://youtu.be/NgZIb6Uwpjc
答案 2 :(得分:0)
这是一个可能有用的片段:
//DETECTS DUPLICATE DISPLAY NAMES IN USERS BRANCH OF REALTIME DATABASE
function displayNameExists (email, displayName, password){
var users = db.ref('users');
var duplicate = users.orderByChild('displayName').equalTo(displayName);
duplicate.once('value').then(function(snap) {
if(snap.val()){
promptDuplicateName(displayName);
} else {
email = email;
displayName = displayName;
if(ls){
localStorage.setItem('displayName', displayName);
}else{
// unavailable
}
demoLogin.registerUsername(password);
}
}, function(error) {
// The Promise was rejected.
toast(error);
});
}