Javascript 修改firebase函数中的变量
每当我的程序试图修改Javascript 修改firebase函数中的变量,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,每当我的程序试图修改firebase函数中存在的时,获得的值都是临时值。我希望在这个函数的末尾能够返回true或返回false。我看到了一些相关的帖子,但似乎没有任何效果。使存在全局并分离快照功能无效。有什么建议吗 function checkIfUserExists(userId) { var exists; var usersRef = firebase.database().ref("users"); usersRef.child(userId).once('val
firebase函数中存在的时,获得的值都是临时值。我希望在这个函数的末尾能够返回true
或返回false
。我看到了一些相关的帖子,但似乎没有任何效果。使存在全局
并分离快照功能
无效。有什么建议吗
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
}
在这种情况下,由于作用域的原因,无法返回exists。function(snapshot)
后面括号内的所有内容都是回调,这意味着您的函数将此查询设置到数据库,并在Firebase返回数据后运行这些括号内的代码。同时,它将继续执行您的其他功能。因此,exists在返回之前没有给定值
你可能想要更全球化的东西。可以将exists设置为全局变量,使此函数不返回任何内容,然后检查exists的值。如果必须为多个用户执行此操作,可以将其放入字典类型的结构中 由于一次
返回一个承诺,然后返回一个新的承诺,因此不能只返回存在
,因为为其赋值的块稍后发生
但是,您可以返回承诺,然后在呼叫站点中使用
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*/)
好的,我在一个while循环中使用它,所以在所有站点上我会写什么?checkIfUserExists(userId)。然后(exists=>//如何返回true或false)如果您在循环中使用它,您将有许多承诺。您可以使用Promise.all
等待它们全部完成,并获得一组结果。