Угловая обработка ошибок 2/4 в URL forkjoin


Я usimg angular 2, и я использую forkjoin для одного из сценариев, где я должен выполнить несколько вызовов rest параллельно.Следование-моя функция

 private getBatchObservableData(data: Array<Widget>): Observable<any> {
    let observableBatch = [];
    data.forEach(widget => {
      observableBatch.push(this._http.get(widget.apiPath).delay(500).map((data) => data.json()).share())
    });
    return Observable.forkJoin(observableBatch);
  }

Это работает совершенно нормально.Но когда какой-либо из остальных вызовов терпит неудачу, wholeforkjoin fails.So существует ли какой-либо способ выдавать значения тех вызовов rest и просто регистрировать, которые завершились неудачей. ?? Пожалуйста помочь.

1 2

1 ответ:

Если вы используете catch для предотвращения ошибок, возникающих при вызове forkJoin, Вы можете повторно выдать их в виде значений и проверить значения в дополнительной функции проекта forkJoin:

private getBatchObservableData(data: Array<Widget>): Observable<any> {
  let observableBatch = [];
  data.forEach(widget => observableBatch.push(this._http
    .get(widget.apiPath)
    .delay(500)
    .map(data => data.json())
    .catch(error => Observable.of(error))
  ));
  return Observable.forkJoin(observableBatch,
    (...results) => ({
      failed: results.map(r => r instanceof Error ? r : null),
      succeeded: results.map(r => r instanceof Error ? null : r)
    })
  );
}
В приведенном выше примере будет выделен объект, содержащий два массива, каждый из которых будет содержать то же количество элементов, что и массив data:
  • элементы в failed будут содержать Error, если соответствующий запрос не удался и null в противном случае.
  • элементы в succeeded будут содержать данные, если соответствующий запрос удался и null в противном случае.
Должно быть легко перестроить вещи, если вам нужно сделать что-то немного по-другому.