修改firebase函数中的变量

时间:2017-08-17 18:15:24

标签: javascript firebase firebase-realtime-database

每当我的程序尝试修改exists中的firebase function时,获得的值都是临时的。我希望能够在return true结束时falsefunction。我看到了一些相关帖子,似乎没有任何效果。制作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
}

2 个答案:

答案 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的值。如果必须为多个用户执行此操作,则可以将其放在字典类型的结构中。