为什么在这种情况下尝试catch不起作用?

时间:2019-03-06 13:32:32

标签: angular

我有一个带有以下登录服务的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块处理。这是正确的行为吗?

1 个答案:

答案 0 :(得分:5)

我认为这是由于try {} catch(err) {}是同步操作,而您的.then().catch()设计为异步。

对于您的try catch,在执行代码后可能会发生错误,因此无法检测到。