javascript - Concat Array of Observables 并有一个单一的订阅输出

标签 javascript rxjs observable

我的软件有几个案例,其中我有一组可观察值,我需要按顺序执行它们。只有在上一个订阅完成后才会进行下一个订阅。

所以我正在使用 concat 运算符。它工作得很好,但是每次 Observables 之一完成时都会触发它的订阅,我只需要在一切完成后触发它。

concat(
  of(1, 2, 3).pipe(delay(3000)),
  // after 3s, the first observable will complete and subsquent observable subscribed with values emitted
  of(4, 5, 6).pipe(delay(3000)),
)
  // log: 1,2,3,4,5,6
  .subscribe((v) => {
  // Needs to be triggered once after everything is complete
    console.log(v);
  });

我需要一种方法来管理这个可观察对象,以便订阅在一切完成后仅被触发一次,订阅的值在这种情况下并不重要,因此可以省略。

如果可能,可以在订阅上下文中以数组的形式提供这些值。

最佳答案

toArray 收集数组中的值.

import { toArray } from 'rxjs/operators';

concat(
  of(1, 2, 3).pipe(delay(3000)),
  of(4, 5, 6).pipe(delay(3000)),
).pipe(
  toArray()
).subscribe(v => console.log(v)); // log: [1,2,3,4,5,6]

或者,如果您不需要响应,请像@Willem 的解决方案中那样使用 complete 回调。

关于javascript - Concat Array of Observables 并有一个单一的订阅输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56150131/

相关文章:

javascript - react 键是本地的还是全局的?

javascript - DOJO 过滤选择 RegExp 查询

javascript - 检查所需模块的类型以及它是否根据其类型返回正确的对象

java.util.Observable,客户端是否会在继续之前完成执行它们的 update()

c# - .NET 的 RX - 从 Disposable.Create 中调用 observer.OnCompleted 时没有任何反应

angular - 如何使用 BehaviourSubjects 在 Angular 组件之间共享 API 调用的数据?

javascript - 使用 Ajax 调用处理超时

javascript - 检查元素是否不包含特定句子

angular - Crud Service RXJS Angular 9 命令查询模式

angular - 如何删除/销毁 Angular 2+ 模板中的可观察对象