【问题标题】:combineLatest2 with only the first non-null stream outputscombineLatest2 只有第一个非空流输出
【发布时间】:2019-03-29 03:08:13
【问题描述】:

我有两个来自 firestore 的流,我只需要在这两个流第一次产生值时执行计算密集型操作。

我考虑过combineLatest2(),但据我所知,这将在每次流产生输出时执行(不仅仅是第一次)。

我考虑过.firstWhere(),但我不知道如何组合流来使用它。

任何建议将不胜感激。

谢谢

【问题讨论】:

  • forkjoin with first?
  • @bryan60 forkjoin 结合了最后发出的值。我只想要每个流的第一个值。我怎么能先用这个?

标签: rxjs rxdart


【解决方案1】:

如果将 take(1) 添加到传入的流中,则可以使用 forkJoin。然后流将在一次输入后完成,并且将触发 forkJoin。

forkJoin(
    stream1$.pipe(take(1)),
    stream2$.pipe(take(1))
).pipe(
    // Do your computationally intensive operation 
);

【讨论】:

    【解决方案2】:

    您的回答帮助我找到了有用的解决方案。

    combineLatest2(stream1.take(1), stream2.take(1), (s1, s2) {
    // computationally intensive operation
    }).listen((_) => {});
    

    【讨论】:

    • 我推荐 forkJoin,因为它在语义上更清晰。 ForkJoin 仅在完成时发出并有一次发出,所以如果这是您所期望的情况(典型情况),那么您应该使用它来使所发生的事情一目了然。 CombineLatest 意味着具有多个排放的连续排放流。这些语义对于管理订阅和防止内存泄漏具有重要意义。此外,first() 是 take(1) 的简写/更语义化,尽管在这种情况下差异更小。
    • @bryan60 感谢您的澄清。我正在使用 rxdart,但它还没有实现 forkJoin。
    猜你喜欢
    • 2022-08-12
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多