Подписка внутри функции обработки ошибок из внешней подписки - PullRequest
0 голосов
/ 26 марта 2020

У меня есть случай подписки внутри другой подписки, и мы знаем, что это плохо. Проблема в том, что я не знаю, как решить ее здесь:

this.backendService.doSomething().subscribe(
  () => { },
  err => {
    this.someService.showOkMessage('title', 'you got an error')
      .subscribe(); // The bad guy
  },
  () => {
    // should not be called if there is an error
    this.someService.showOkMessage('title', 'everything is fine')
      .subscribe(); // Another bad guy
  }
}

Я пробовал что-то вроде этого:

this.backendService.doSomething().pipe(
  catchError(errMsg => {
    return someService.showOkMessage('title', 'you got an error').map(() => true));
  )},
  switchMap(isError =>
    if(!isError) return someService.showOkMessage('title', 'everything is fine');
  )
).subscribe();

Это работает, но я не чувствую себя хорошо, я не Я не хочу преобразовывать / изменять поток, он должен просто закончиться.

1 Ответ

2 голосов
/ 26 марта 2020

Просто нужно немного переупорядочить, при возникновении ошибки она перейдет к catchError(), если не ошибиться, то запустится switchMap

this.backendService.doSomething().pipe(
  switchMap(()=> someService.showOkMessage('title', 'everything is fine')),
  catchError(errMsg => 
    someService.showOkMessage('title', 'you got an error')
  ),
).subscribe();
...