我有一个带有以下登录服务的Angular应用程序:
@Injectable()
export class LoginService {
....
socialLogin(provider: SocialLoginProvider) {
gapi.auth2
.getAuthInstance()
.signIn()
.then(() => {
this.googleAuthLoginStatusChangeCallback(
gapi.auth2.getAuthInstance().isSignedIn.get()
);
})
.catch(err => {
console.log('Here is executed');
throw new Error('Error');
});
}
}
然后我的login.component.ts
使用此服务:
socialLogin(provider: SocialLoginProvider) {
try {
this.loginService.socialLogin(provider);
} catch(err) {
console.log('This not Execute'); // this line does not execute;
}
}
当我在承诺的.catch()
上遇到错误时,我可以在控制台上看到来自gapi sdk的错误消息和我的自定义日志消息Here is executed
,这意味着我的错误是抛出,但没有被组件的try/catch
块处理。这是正确的行为吗?
答案 0 :(得分:5)
我认为这是由于try {} catch(err) {}
是同步操作,而您的.then().catch()
设计为异步。
对于您的try catch
,在执行代码后可能会发生错误,因此无法检测到。