Angular 执行回调时如何处理订单?
我在angular2应用程序中使用firebase进行身份验证,我遇到了回调问题。这是我的代码段,用于标识用户是否已登录Angular 执行回调时如何处理订单?,angular,typescript,asynchronous,callback,firebase-authentication,Angular,Typescript,Asynchronous,Callback,Firebase Authentication,我在angular2应用程序中使用firebase进行身份验证,我遇到了回调问题。这是我的代码段,用于标识用户是否已登录 verifyLogin(url: string): boolean { var myUser = null; firebase.auth().onAuthStateChanged(function(user) { if (user) { myUser = user; console.log("sdfsdfsd"); console.log(myUs
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条件。我也不能在回叫中返回。如何修复此问题?解决此问题的一种方法是使
verifyLogin()
返回一个。这样,verifyLogin()
只会在onAuthStateChanged()完成后返回true
或false
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()
只会在onAuthStateChanged()完成后返回true
或false
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”方法是异步的。使用@samAlvin-answer,使其返回承诺。记住,回调是异步的。如果要使用回调的结果,那么“verifyLogin”方法是异步的。使用@samAlvin-answer,使其返回一个承诺。此外,在创建新承诺时,最好进行try/catch包装,以确保不会陷入僵局。如果auth()抛出错误,这将永远无法解决()此外,在创建新承诺时,最好进行try/catch包装,以确保不会陷入死锁。如果auth()抛出错误,则永远无法解决()