我有一项服务,其getAllMessages()
会返回一系列项目的观察结果:Observable<ITEM[]>
我将结果映射为将每个ITEM发布到RestAPI:
this.service.getAllMessages()
.map(items => ...for each item of items, call this.apiService.postMessage(item)...)
postMessage(item)
会返回Observable<Response>
我的目标是获得Observable<Response[]>
,我可以查看this.apiService.postMessage(item)
我尝试使用flatMap
:
this.service.getAllMessages()
.flatMap(items => {
return items.map(item => {
return this.apiService.postMessage(item);
});
}).subscribe(RES => {
console.log(RES);
});
但这里RES是Observable<Response>
而不是简单的Response
我怎样才能做到这一点?
答案 0 :(得分:1)
this.service.getAllMessages()
返回的内容是Observable
数组,而不是Observable
数组。 .map()
函数属于数组函数。
如果要并行执行所有Observable,请使用.forkJoin()
:
this.service.getAllMessages()
.flatMap(items => {
return Observable.forkJoin(items.map(item => this.apiService.postMessage(item)));
})
.subscribe(RES => {
console.log(RES);
});
如果要按顺序执行observable,请使用.concat()
:
this.service.getAllMessages()
.flatMap(items => {
return Observable.concat(...items.map(item => this.apiService.postMessage(item)));
})
.subscribe(RES => {
console.log(RES);
});
请注意.concat
。