订阅时处理 forkJoin 中的错误
Handle error in forkJoin on subscribe
我有下一个功能:
saveTable() {
...
let promises = [];
for (index = 0; index < this._TOTAL.length; ++index) {
let promise = this.db.object(ref).update(this._TOTAL[index]);
promises.push(promise);
}
Observable.forkJoin(promises).subscribe(() => {
this.messagesService.createMessage('success', `Saved`);
this.router.navigate(['/dashboard/my-calculations']);
})
}
在这种情况下我该如何处理错误?实际上,我只需要在我所有的承诺都解决后使用 then
和 catch
,所以从根本上对我来说使用 forkJoin
不是。
forkJoin
如果 any(至少一个)它是 fork-joining 的 Observables
会抛出错误。您可以在错误处理程序中处理它:
Observable
.forkJoin(promises).subscribe(() => {
this.messagesService.createMessage('success', `Saved`);
this.router.navigate(['/dashboard/my-calculations']);
},
(error) => {
//handle your error here
}, () => {
//observable completes
})
你可以按照下面的代码来做
import { catchError } from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
import { forkJoin } from 'rxjs/observable/forkJoin';
forkJoinTest() {
const prouctIds: number[] = [1, 2, 3];
const productRequests = prouctIds.map(id => this.productService.getProduct(id).pipe(
catchError(error => of(`Bad Promise: ${error.message}`))
));
const requests = forkJoin(productRequests);
requests.subscribe(
data => console.log(data) //process item or push it to array
);
}
基本上使用 catchError
运算符,它会为你做
在此处查看详细信息:Way to handle Parallel Multiple Requests
我有下一个功能:
saveTable() {
...
let promises = [];
for (index = 0; index < this._TOTAL.length; ++index) {
let promise = this.db.object(ref).update(this._TOTAL[index]);
promises.push(promise);
}
Observable.forkJoin(promises).subscribe(() => {
this.messagesService.createMessage('success', `Saved`);
this.router.navigate(['/dashboard/my-calculations']);
})
}
在这种情况下我该如何处理错误?实际上,我只需要在我所有的承诺都解决后使用 then
和 catch
,所以从根本上对我来说使用 forkJoin
不是。
forkJoin
如果 any(至少一个)它是 fork-joining 的 Observables
会抛出错误。您可以在错误处理程序中处理它:
Observable
.forkJoin(promises).subscribe(() => {
this.messagesService.createMessage('success', `Saved`);
this.router.navigate(['/dashboard/my-calculations']);
},
(error) => {
//handle your error here
}, () => {
//observable completes
})
你可以按照下面的代码来做
import { catchError } from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
import { forkJoin } from 'rxjs/observable/forkJoin';
forkJoinTest() {
const prouctIds: number[] = [1, 2, 3];
const productRequests = prouctIds.map(id => this.productService.getProduct(id).pipe(
catchError(error => of(`Bad Promise: ${error.message}`))
));
const requests = forkJoin(productRequests);
requests.subscribe(
data => console.log(data) //process item or push it to array
);
}
基本上使用 catchError
运算符,它会为你做
在此处查看详细信息:Way to handle Parallel Multiple Requests