可观察数组到数组(Rxjs)

时间:2017-10-19 16:35:18

标签: arrays angular typescript rxjs observable

我有一项服务,其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 个答案:

答案 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

的点差运算符