【发布时间】:2018-04-26 18:03:02
【问题描述】:
我正在尝试在 Angular 5 中使用 RxJs Observable 实现 Promise.all 等效项,已经尝试了所有建议的解决方案 here,但没有一个对我有用,链中的 http 请求根本没有被触发。
这是我要执行的代码:
let selected = [{channel: 1},{channel: 2},{channel: 3}];
postToDB(item: any): Observable<any> {
return this.http.post('/api/items/', item);
}
submitAll() {
let submitAllSelected = selected.map((item: any) => {
return this.postToDB(item).map((res: Response) => res.json());
});
Observable.forkJoin(submitAllSelected)
.subscribe((result: any) => {
this.toaster.success('item saved successfully');
}, (err: any) => {
this.toaster.error(JSON.stringify(err));
}, () => {
this.toaster.success('All items saved successfully');
});
}
由于某种原因,我无法弄清楚,在调用 submitAll() 并且未调用订阅回调之后,未触发 http 请求。 我设法使它工作的唯一方法是在 postToDB() 函数之后添加 .subscribe(cb) 或 .toPromise() 。
这种方法适用于:
Promise.all(selected.map(item => postToDB(item).toPromise()).then(//do something);
但不是 Observable.forkJoin/zip/concat 或我尝试过的任何其他方法。 如果有人能指出我做错了什么,那就太好了。
【问题讨论】:
-
你能做一个演示吗?
标签: angular rxjs observable es6-promise