我通过forloop构建了一系列可观察对象。然后,我使用forkjoin按顺序执行它们,并在全部通过.add()完成后刷新视图。
let observables: Observable<any>[] = [];
this.selection.selected.forEach((person) => {
// API CALL.
observables.push(this._personService.deletePerson(person.ID));
});
forkJoin(observables)
.pipe(take(1))
.subscribe(dataArray => {})
.add(() => {
this._snackbars.openSnackbarShowResults("Mass Delete Completed.");
this.refresh();
});
我需要一种方法来跟踪哪些可观察的对象失败并返回错误。我使用这些错误来通知用户哪些对象无法删除,哪些对象可以删除。在forkJoin完成之后,是否有一种简单的方法来获取哪些可观察对象出错?
基本上是forkJoin中失败和已完成可观察对象的列表。
答案 0 :(得分:1)
您可以在要插入数组的可观察对象上放置一个catch块。这样,您可以确定输出失败时必须是什么。尝试下面的代码片段,并验证您的控制台日志:
let observables: Observable<any>[] = [];
this.selection.selected.forEach((person) => {
// API CALL.
observables.push(this._personService.deletePerson(person.ID).catch(() => Observable.of(false)));
});
forkJoin(observables)
.pipe(take(1))
.subscribe(dataArray => { console.log(JSON.stringify(dataArray)); })
.add(() => {
this._snackbars.openSnackbarShowResults("Mass Delete Completed.");
this.refresh();
});
答案 1 :(得分:1)
使用rxjs
的更好方法是通过管道传递catchError
运算符,该运算符会将错误消息存储在一个对象中,以便以后使用。处理完错误后,您可以传递可观察到的null
.pipe(
catchError(err => {
this.errors["errorForObservable1"] = "error";
return of(null);
})
)
https://stackblitz.com/edit/angular-forkjoin-handle-errors上的Stackblitz