是否可以使用 forkjoin 单独处理错误?我需要同时调用多个请求,在调用请求时在屏幕上显示加载。如果某个请求中发生错误,并且另一个成功,我需要在屏幕上成功显示请求,并向另一个显示错误消息。
Meu código no Page.ts:
getData(){
this.loadingService.showLoader("Loading, please wait");
Observable.forkJoin([
this.issuesService.getIssues(),
this.categoryService.getCaretories()
]).subscribe(
(response) => {
let issues = JSON.parse((response[0] as any)._body);
let categories = JSON.parse((response[1] as any)._body);
//do something with issues and categories
}, (error) => {
console.log(`Backend returned error was: ${error}`);
this.closeLoading(refresher);
this.showContent = false;
}, () => {
console.log('complete all request');
this.closeLoading(refresher);
});
}
}
如果"问题"请求和"类别"请求中发生错误,则返回成功。我需要在屏幕上显示如何成功分类,并显示"问题"的错误消息。
目前,当发生错误时,将显示所有请求的错误消息。
RxJS forkJoin
的工作方式与 Promise.all
类似。如果其中一个源引发错误,则生成的源也会引发错误。如果它不应该抛出,则应在抛出它的源中捕获错误:
Observable.forkJoin(
this.issuesService.getIssues().catch(err => Observable.of(err)),
this.categoryService.getCaretories().catch(err => Observable.of(err))
)
然后可以像常规值一样处理错误:
.subscribe(([issuesRes, categoriesRes]) => {
if (issuesRes instanceof Error) ...
else ...
});