我一直试图解决这个问题已经有一段时间了,我猜这是一个非常常见的问题,但我想做的是来自一个可观察的数组中的增强项,并且增强发生在一种可观察的或有前途的 所以我想要以下内容:
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的东西。
答案 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[]) => {
// ...
});