首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >组合多个观察值并在角度中至少返回一个值时采取行动

组合多个观察值并在角度中至少返回一个值时采取行动
EN

Stack Overflow用户
提问于 2019-03-14 01:51:47
回答 1查看 2.9K关注 0票数 4

我有一组观察值,当最后一个提供了一个值(不管是哪个值)时,我需要做出反应。

我的第一个方法是这样的。

代码语言:javascript
复制
const observables = [
  this.backend.config(),
  this.navigation.location()
];

forkJoin(observables)
  .subscribe(([backend, selection]) => {
    console.log(backend);
    console.log(selection);
  });

这在一定程度上是可行的,只要观察到的发射在某一时刻完成(在此基础上,调用终结化。然后我尝试了。这解决了原来的问题,但创造了一个新的问题。现在,只要任何可观察对象的提供,我就会调用最后一个方法。

我希望在每个观察值至少提供一次并且可能已经完成或可能没有完成时调用它。无论它是每一个的最新值还是第一个值都无关紧要。不过,学习如何在+1中控制它可能是一个加号。

我想出的最好的解决方案是检查!!backend和!!导航,只有当它们都满足时才采取行动。我正在寻找一种更平滑的解决方案,或者确认我正在使用的解决方案是最好的。

代码语言:javascript
复制
combineLatest(observables)
  .subscribe(([a, b, c]) => {
    if (!a || !b || !c)
      console.log("Oh, I'm coming...");
    else
      console.log("Wham, bam - I'm done!");
  });

所有这些都来自博客like thisthatposts on SOObservables' docs

EN

回答 1

Stack Overflow用户

发布于 2019-03-15 07:59:50

使用zip而不是forkJoin。它的工作原理类似,但不需要观察对象来完成。

代码语言:javascript
复制
const a$ = of('a');                       // will complete instantly
const b$ = timer(2000).pipe(mapTo('b'));  // will complete later 
const c$ = new BehaviorSubject('c');      // will never complete

zip(a$, b$, c$).subscribe(console.log)    // (after 2s) ['a', 'b', 'c']

演示:https://stackblitz.com/edit/rxjs-ycqqhn

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

https://stackoverflow.com/questions/55148336

复制
相关文章

相似问题

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