首页 > 解决方案 > 为什么javascript异步函数不等待firebase.auth方法完成?

问题描述

我正在尝试检查用户是否已登录并基于此返回 true 或 false。但是函数在 firebase 调用完成之前返回。

async function checkLogin() {
    var result;

    await firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
          result = true;
          console.log("user is signed in");
        } else {
        result = false;
          console.log("user is not signed in");
        }
        });
        console.log("End of function");
        return result;
}

“功能结束”在上述任何两个之前打印出来。结果中的值始终未定义。似乎函数在完成之前返回firebase.auth()。有没有办法让它在返回之前等待。

标签: javascriptfirebaseasync-awaitfirebase-authentication

解决方案


onAuthStateChanged()不返回一个承诺,它返回一个取消订阅函数。您onAuthStateChanged()可以添加一个侦听器/观察者/订阅者,随着登录状态随时间的变化而被调用。您可以在该回调中编写代码,以在用户登录或退出时执行您想要的操作。Promise 在这里对您没有帮助 - 设计您的代码以使用该回调。


推荐阅读