首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CombineLatest和take(1)

CombineLatest和take(1)
EN

Stack Overflow用户
提问于 2018-08-21 13:28:40
回答 1查看 4.9K关注 0票数 1

我有两个带有默认值的BehaviorSubjects $A$B。它们都在使用.next(value)在不同时间使用值进行更新。在后面的代码中,我试图提取如下所示的值

代码语言:javascript
复制
 Observable.combineLatest($A, $B)
  .take(1)
  .map(([$a, $b]) => {
    return {
      // stuff
    }
  })
  .subscribe(fn)

我看到的行为很奇怪。我期望可观察到的对象等待任何一个主体发出一个值,然后给我一个发出的值,我可以将其传递给订阅函数。但它只释放值与$B发出一个新的价值。当$A发布时,它将从$B获取新的值,但是它不会做相反的事情。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 13:42:11

当所有源可观测值在combineLatest上至少发出一个项,然后在上发出来自任何可观测源的每个发射时,运算符就会发出。

所以如果你想要的话。$A发出,即使$B没有发出任何东西,您也可以在每个源中添加startWith。在结果数组中,您可以检查哪个索引中填充了一个值,从而判断什么是可以观察到的源。

代码语言:javascript
复制
const a = $A.pipe(startWith(undefined));
const b = $B.pipe(startWith(undefined));

Observable.combineLatest(a, b)
  ...

我想你这么做是因为你想知道哪个源可以首先被观测到。您可以通过使用与merge链接的take(1)来实现同样的效果,而不是startWith,您可以将每个值映射到唯一可区分的值上。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51949851

复制
相关文章

相似问题

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