每当我的程序尝试修改exists
中的firebase function
时,获得的值都是临时的。我希望能够在return true
结束时false
或function
。我看到了一些相关帖子,似乎没有任何效果。制作exists global
并将snapshot function
分开无效。有什么建议吗?
function checkIfUserExists(userId) {
var exists;
var usersRef = firebase.database().ref("users");
usersRef.child(userId).once('value').then(function(snapshot) {
exists = (snapshot.val() !== null); // exists is true or false
userExistsCallback(userId, exists);
});
return exists; //exists is undefined
}
答案 0 :(得分:1)
由于once
会返回一个承诺,并且then
会返回一个新承诺,因此您无法返回exists
,因为为其分配值的块会在稍后发生。
但是,您可以返回承诺,并在呼叫网站中使用then
function checkIfUserExists(userId) {
var exists;
var usersRef = firebase.database().ref("users");
return usersRef.child(userId).once('value').then(function(snapshot) {
exists = (snapshot.val() !== null); // exists is true or false
return exists;
});
}
然后在通话网站:
checkIfUserExists(userId).then(exists => /*do something*/)
答案 1 :(得分:0)
在这种情况下,由于范围,您无法返回存在。 body { margin: 10px }
.disable-labels .toggle-group .toggle-on,.disable-labels .toggle-group .toggle-off{
visibility:hidden;
}
之后括号内的所有内容都是回调,这意味着您的函数会将此查询设置到数据库,并在Firebase返回您的数据后运行这些括号中的代码。与此同时,它将继续执行您的其余功能。因此,在返回之前不存在值。
你可能想要一些更全球化的东西。你可以使存在一个全局变量,使该函数不返回任何内容,然后检查exists的值。如果必须为多个用户执行此操作,则可以将其放在字典类型的结构中。