首页 文章

如何在执行回调时处理订单?

提问于
浏览
0

我在angular2应用程序中使用firebase进行身份验证,我遇到了回调问题 . 这是我的代码段,用于标识用户是否已登录 .

verifyLogin(url: string): boolean {
var myUser = null;
firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    myUser = user;
    console.log("sdfsdfsd");
    console.log(myUser);
  } else {
    // No user is signed in.
  }
});
console.log("check");
console.log(myUser);
if(myUser){
  return true;
}
console.log(myUser);
this.router.navigate(['/admin/signin']);
return false;

}

如果用户已登录,则此verifyLogin函数将返回true,否则返回false . 但问题是底部部分包含if条件在执行回调之前执行 . 我也无法返回回调内部 . 如何解决这个问题?

1 回答

  • 3

    解决此问题的一种方法是使 verifyLogin() 返回Promise . 这样, verifyLogin() 只会在 onAuthStateChanged() 完成后返回 truefalse .

    verifyLogin(url: string): Promise<boolean> {
        return new Promise((resolve) => {
            var myUser = null;
            firebase.auth().onAuthStateChanged(function(user) {
                if (user) {
                    myUser = user;
                    console.log("sdfsdfsd");
                    console.log(myUser);
                    resolve(true);
                } else {
                    // No user is signed in.
                    resolve(false);
                }
            });
        });
    }
    

    然后你可以像这样调用 verifyLogin()

    verifyLogin("someUrl").then(isLoggedIn => {
        if (isLoggedIn == false) {
            this.router.navigate(['/admin/signin']);
        }
    });
    

相关问题