ошибка от службы не перехватывается в component.ts - PullRequest
0 голосов
/ 30 мая 2019

Когда пользователь входит в систему, я получаю его 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 ]

1 голос
/ 30 мая 2019

Вы можете обработать исключение, переместив оператор try... catch внутри обратного вызова setTimeout:

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

См. этот стек-блиц для демонстрации.

1 голос
/ 30 мая 2019

try / catch не поймает ничего в обратном вызове, переданном для подписки (или затем или setTimeout или что-нибудь нелепое), которое работает на другом «галочка» или «микрозадача». Вы должны ловить ошибки в задаче, где они произошло.

В этом ответе есть решение https://stackoverflow.com/a/50494803/7179294

...