【发布时间】:2018-09-26 08:27:34
【问题描述】:
我有一个案例,我有一堆从route.params 恢复的 id,如下所示:
const ids$ = this.route.params.pipe(
map(params => {
const modelId = +params['modelId'];
const deliverId = +params['deliverId'];
const compositionId = +params['compositionId'];
return { modelId, deliverId, compositionId };
})
);
之后,我必须从服务器恢复composition对象,所以我这样做:
const getComposition$ = ids$.pipe(
switchMap(ids =>
this.compositionsService.getComposition(ids.compositionId)
)
);
现在我想要一个具有前两个 id 的聚合对象,而不是最后一个 (compositionId),composition 对象,我的意思是:
entities: {
modelId: number;
deliverId: number;
composition: Composition;
};
所以我这样做:
const aggregated$ = forkJoin(ids$, getComposition$).pipe(
map(arr => ({
modelId: arr[0].modelId,
deliverId: arr[0].deliverId,
aggregated: arr[1]
}))
);
然后,我订阅它:
const aggregated$.subscribe(aggregated => {
console.log(aggregated);
});
但它从不在控制台上打印任何内容。有趣的是,如果我检查是否对服务器进行了调用,它实际上是,但最后一个 observable (aggregated$) 从来没有发出任何东西。
我做错了什么?有没有更好的方法来实现这一点?
【问题讨论】:
标签: angular rxjs angular2-observables