Angular2 rxjs наблюдаемый forkjoin

Можно ли продолжить запросы forkjoin http.get, даже если один из запросов завершился с ошибкой.

Я ищу аналогичную функцию $q.allSettled в angular2.

См. пример: http://jsfiddle.net/Zenuka/pHEf9/

angular.module('qAllSettled', []).config(function($provide) {
  $provide.decorator('$q', function($delegate) {
    var $q = $delegate;
    $q.allSettled = function(promises) {
      return $q.all(promises.map(function(promise) {
        return promise.then(function(value) {
          return { state: 'fulfilled', value: value };
        }, function(reason) {
          return { state: 'rejected', reason: reason };
        });
      }));
    };
    return $q;
  });
});

Каб

Ответы

Ответ 1

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

Вот пример:

return Observable.forkJoin(
  this.http.get('/some-url')
         .map((res:Response) => res.json())
         .catch(res:Response => Observable.of({}),
  this.http.get('/some-other-url')
         .map((res:Response) => res.json())
         .catch(res:Response => Observable.of({}),
);

Ответ 2

Использует Observable.forkJoin() для запуска нескольких одновременных запросов http.get(). Вся операция приведет к возникновению ошибки, если какой-либо один запрос завершится с ошибкой.

 getBooksAndMovies() {
    return Observable.forkJoin(
      this.http.get('/app/books.json').map((res:Response) => res.json()),
      this.http.get('/app/movies.json').map((res:Response) => res.json())
    );

Но вы можете добавить дополнительный запрос GET в обработчик ошибок:

getBooksAndMovies() {
    Observable.forkJoin(
        this.http.get('/app/books.json').map((res:Response) => res.json()),
        this.http.get('/app/movies.json').map((res:Response) => res.json())
    ).subscribe(
      data => {
        this.books = data[0]
        this.movies = data[1]
      },
      err => console.error(err)
    );