有一种方法具有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获取项目?
答案 0 :(得分:2)
使用mergeMap
运算符:
resolve() {
return this.idService.getId()
.mergeMap.(id => this.itemService.getItem(id));
}
在这里演示:https://www.learnrxjs.io/operators/transformation/mergemap.html
switchMap
:
映射到可观察的,完整的先前内部可观察值,发出值。
这意味着,它将完成先前的可观察,发射,切换到新的可观察状态。
如果一次只能激活一个内部订阅
如果只有一个内部可观察者mergeMap
和concatMap
相同。