RxJS: Как ждать нескольких наблюдаемых, даже если одна или несколько не пройдут - PullRequest
0 голосов
/ 04 июня 2018

Я использовал оператор zip для ожидания трех наблюдаемых и одновременной обработки результата:

Observable
   .zip(
      this.sapService.getProductSpareParts(this.identForm.get('ident').value),
      this.mediacacheService.getMediaItemsByIdent(this.identForm.get('ident').value),
      this.mediacacheService.getMetaInfos(this.identForm.get('ident').value)
    )
    .subscribe((results: any) => {
      // do stuff
    });

Возможно, что одна или несколько из этих трех наблюдаемых не пройдут и вернут результат 500.В этом случае все остальные ожидаемые наблюдаемые будут отменены.

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

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Как предложил Робин, используйте оператор catchError с оператором pipe для каждой из наблюдаемых:

Observable
  .zip(
    this.sapService.getProductSpareParts(this.identForm.get('ident').value).pipe(catchError(val => of(`I caught: ${val}`))),
    ...
  )
  .subscribe((results: any) => {
    // do stuff
  });

См. https://www.learnrxjs.io/operators/error_handling/catch.html для получения дополнительной информации.

0 голосов
/ 04 июня 2018

Посмотрите решение ниже, я думаю, что это решит вашу проблему

var source = Rx.Observable.onErrorResumeNext(
     Rx.Observable.just(42),
     Rx.Observable.throw(new Error()),
     Rx.Observable.just(56),
     Rx.Observable.throw(new Error()),
     Rx.Observable.just(78)
   );

var subscription = source.subscribe(
     data => console.log(data)
   ); 

Результат

// => 42

// => 56

// => 78

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...