可观察的数组到数组(Rxjs)
Posted
技术标签:
【中文标题】可观察的数组到数组(Rxjs)【英文标题】:Observable of array to array (Rxjs) 【发布时间】:2018-03-31 18:42:40 【问题描述】:我有一个服务,它的 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)
的每个帖子的http 代码
我尝试使用flatMap
:
this.service.getAllMessages()
.flatMap(items =>
return items.map(item =>
return this.apiService.postMessage(item);
);
).subscribe(RES =>
console.log(RES);
);
但这里的 RES 是 Observable<Response>
而不是简单的 Response
我怎样才能做到这一点?
【问题讨论】:
【参考方案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
的扩展运算符。
【讨论】:
非常感谢您挽救了我的一天! (不了解spread算子,乐于学习)以上是关于可观察的数组到数组(Rxjs)的主要内容,如果未能解决你的问题,请参考以下文章