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
等待它们全部完成,并获得一组结果。