服务未在component.ts中捕获的错误

时间:2019-05-30 13:22:33

标签: angular typescript service error-handling

用户登录后,我将检索他们的userAccount。在未返回的情况下,我在服务中抛出错误。然后,我继续在component.ts控制器中捕获错误。

由于某些原因,component.ts无法捕获所引发的错误。在控制台中,我可以看到错误,但是由于某种原因,我的component.ts未能在try/catch块中捕获它。

我已经对其进行了多次测试,以查看失败的原因,并且错误消息似乎没有到达catch语句。

这是我的服务:

/* On error: */
error => {

    if (error.status === 401) {

        Helpers.logGroupedErrorObjectsToDevConsole(
            'Login Service: getCustomerAccount()',
            [
                {
                    title: 'Session Timed Out:',
                    info:  true
                }
            ]
        );
    } else {
        Helpers.logGroupedErrorObjectsToDevConsole(
            'Login Service: getCustomerAccount()',
            [
                {
                    title: 'Cannot get customer account:',
                    info: true
                }
            ]
        );
    }

    throw new Error(error);
}

这是在我的component.ts

try {
        setTimeout(() => {
           this._service.customer(this.url, this.route)
        }, 1000);
     } catch (e) { 
         this.showUnknownLoginFailureMessage  = true;
     }

我期望的是要在component.ts中处理错误

有可能吗? 我是在正确处理错误还是在丢失某些东西?

我需要一些指导。

谢谢!

2 个答案:

答案 0 :(得分:1)

  

try / catch不会在传递给订阅的回调中捕获任何内容(或   然后,或者 setTimeout 或任何在其他版本上运行的东西)   “打勾”或“微任务”。您必须在任务中发现错误   发生了。

此答案https://stackoverflow.com/a/50494803/7179294

中有一个解决方案

答案 1 :(得分:1)

您可以通过在try... catch回调中移动setTimeout语句来处理异常:

setTimeout(() => {
  try {
    this._service.customer(this.url, this.route);
  } catch (e) {
    this.showUnknownLoginFailureMessage  = true;
  }
}, 1000);

有关演示,请参见this stackblitz