首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS:根据以前的值恢复对象,然后与恢复的对象连接并发出先前的值

RxJS:根据以前的值恢复对象,然后与恢复的对象连接并发出先前的值
EN

Stack Overflow用户
提问于 2018-09-26 08:27:34
回答 2查看 197关注 0票数 0

有一种情况是,我有一堆从route.params中恢复的I,如下所示:

代码语言:javascript
复制
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对象,因此我执行以下操作:

代码语言:javascript
复制
const getComposition$ = ids$.pipe(
  switchMap(ids =>
    this.compositionsService.getComposition(ids.compositionId)
  )
);

现在,我希望有一个具有两个第一个ids的聚合对象,而不是最后一个(compositionId),composition对象,我的意思是:

代码语言:javascript
复制
entities: {
  modelId: number;
  deliverId: number;
  composition: Composition;
};

所以我就这么做:

代码语言:javascript
复制
const aggregated$ = forkJoin(ids$, getComposition$).pipe(
  map(arr => ({
    modelId: arr[0].modelId,
    deliverId: arr[0].deliverId,
    aggregated: arr[1]
  }))
);

然后,我订阅了:

代码语言:javascript
复制
const aggregated$.subscribe(aggregated => {
  console.log(aggregated);
});

但它从不在控制台上打印任何东西。有趣的是,如果我检查对服务器的调用是否已经发出,实际上是这样的,但是最后一个可观察的(aggregated$)从未发出任何东西。

我做错了什么?是否有更好的方法来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-26 12:27:43

正如你所说的,ids$getComposition$实际上都是来自于角的this.route.paramsforkJoin操作符需要它的所有源可观测值发出至少一个项,而所有这些都必须完成。这就是当你使用this.route.params时不会发生的事情,因为它是一个从未完成过的主题。

因此,您可以使用例如take(1)来同时完成源ids$getComposition$

代码语言:javascript
复制
forkJoin(ids$.pipe(take(1)), getComposition$.pipe(take(1))
  ...
票数 1
EN

Stack Overflow用户

发布于 2018-09-26 13:13:59

从可观察到的文件:

forkJoin:等待可观测值完成,然后合并它们发出的最后值。

我认为在您的情况下,forkJoin不会发出,因为ids$没有完成。

你可以尝试的是一些类似的东西

代码语言:javascript
复制
const getComposition$ = ids$.pipe(
  switchMap(ids =>
    this.compositionsService.getComposition(ids.compositionId).pipe(
       map(composition => ({composition, modelId: ids.modelId, deliverId: ids.deliverId))
    )
  )
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52513252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档