Как сохранить наблюдаемую живой после ошибки в RxJS 6 и Angular 6 - PullRequest
0 голосов
/ 17 сентября 2018

Может ли кто-нибудь помочь с сценарием, когда this._getReactions$.next() не работает, когда this.http.get(...) получает ошибку.Я хочу, чтобы наблюдаемый был жив, чтобы получить следующий вход.

private _getReactions$: Subject<any> = new Subject();

 constructor() {
  this._getReactions$
  .pipe(
    switchMap(() => {
        return this.http.get(...)
        // http request 
    }),
    catchError(error => {
      console.log(error);
      return empty();
    })
  )
  .subscribe(data => {
      console.log(data)
      //results handling
  });
 }

onClick() {
  this._getReactions$.next();
}

1 Ответ

0 голосов
/ 17 сентября 2018

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

что если мыхочу жить.

решение главной цепочки наблюдателей - это решение
помещать улов в switchmap всякий раз, когда выполняется запрос switchmap создает наблюдаемый ajax, и на этот раз с catch.
switchmap есть поведение, в котором говорится, что мой источник еще не завершен, поэтому мне все равно, завершит ли ребенок, я продолжу.

     constructor() {
          this._getReactions$
          .pipe( tap(value=>{this.loading=true; return value}),
            switchMap(() => {
                return this.http.get(...).pipe(
       catchError((error)=>this.handleError(error)))
                // http request 
            }),
          )
          .subscribe(data => {
              console.log(data)
              //results handling
            this.error=false;
           this.loading=false
          });
         }

      private handleError(error: HttpErrorResponse) {

    this.error = true;
    console.log(error)
    this.loading = false
    return empty();
  }

Live Demo

Detailed Info

...