Rx:在源observable发出后发出值

时间:2017-05-09 12:36:53

标签: angular rxjs

有一种方法具有Observable<item>的签名作为返回值(实际上它是来自Angular 2的解析器的一部分)。但是在方法开始获取item实例之前,它需要从其他可观察对象中获取一些id。

export class itemResolve implements Resolve<item>{
    constructor(
        private itemService: ItemService, //service for access to item instance
        private idService: IdService //service for access to id
    ){}

    resolve() {
        return this.idService.getId().<...>(id => this.itemService.getItem(id)); //???
    }
}

idService.getId()返回Observable。我如何等待id并继续通过id获取项目?

1 个答案:

答案 0 :(得分:2)

使用mergeMap运算符:

resolve() {
    return this.idService.getId()
      .mergeMap.(id => this.itemService.getItem(id));
}

在这里演示:https://www.learnrxjs.io/operators/transformation/mergemap.html

switchMap

  

映射到可观察的,完整的先前内部可观察值,发出值。

这意味着,它将完成先前的可观察,发射,切换到新的可观察状态。

  

如果一次只能激活一个内部订阅

如果只有一个内部可观察者mergeMapconcatMap相同。