在可观察数组中增加单独的值 - RxJS

时间:2017-07-26 19:48:42

标签: rxjs observable reactive-extensions-js

我一直试图解决这个问题已经有一段时间了,我猜这是一个非常常见的问题,但我想做的是来自一个可观察的数组中的增强项,并且增强发生在一种可观察的或有前途的 所以我想要以下内容:

function augment(person: Person): Observable<PersonWithAddress> { 
    // does ajax call or something
}

const items$: Observable<Person[]>;

items$
    .do(x => {}) // x would be of type Person[]
    .flatFlatMap(person => { // person would be of type Person
        return augment(person); // this would return an Observable<PersonWithAddress>
    })
    .subscribe(peopleWithAddresses => { // peopleWithAddresses would be of type PersonWithAddress[]
    })

对于这种情况是否有某种运算符,我得到的是我可以将从observable发出的单个项目扩展或映射到来自具有flatMap的observable的其他项目,但是有类似flatFlatMap的东西。

1 个答案:

答案 0 :(得分:1)

您可以使用forkJoin做您想做的事。

它需要一组observables(或promises),并且当它们都已完成(或已解决)时,它会发出一个包含最后发出(或已解析)值的数组:

import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/forkJoin";


items$
  .flatMap((people: Person[]) => Observable.forkJoin(
    people.map(person => augment(person))
  ))
  .subscribe((peopleWithAddresses: PersonWithAddress[]) => {
    // ...
  });