javascript - 如何链接 RXJS 中的 promise 列表?

标签 javascript asynchronous rxjs rxjs5

我如何在 RXJS 中链接一个 promise 列表?每个 promise 都需要在前一个 promise 解决后执行(待办事项是有状态的)。

我现在做这件事的方式感觉很原始:

const workTodo = []; // an array of work
const allWork = Observable.create(observer => {
  const next= () => {
    const currentTodo = workTodo.shift();
    if (currentTodo ) {
      doTodoAsync(currentTodo)
        .then(result => observer.onNext(result))
        .then(next);
    } else {
      observer.onCompleted();
    }
  };
  next();
});

我是这样想的:

const workTodo = []; // an array of work
const allWork = Observable
                  .fromArray(workTodo)
                  .flatMap(doTodoAsync);

但这基本上是一次执行所有的 promise 。

最佳答案

看来您的尝试已经非常接近了。

您可以为 .flatMap 指定最大并发数 1,例如:

Observable.fromArray(workTodo)
 .flatMap(doTodoAsync, 1)

或者等效地使用 .concatMap 而不是 .flatMap:

Observable.fromArray(workTodo)
 .concatMap(doTodoAsync)

我会使用 concatMap,因为它感觉更地道。

更新: DEMO

关于javascript - 如何链接 RXJS 中的 promise 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956042/

相关文章:

javascript - Kendo UI Grid 渲染后或数据绑定(bind)事件后?

javascript - 在函数内部修改变量后,为什么变量未更改? -异步代码引用

javascript - 可观察函数返回分块数组

javascript - RXJS6 - 从返回 Observable 的 Promise 函数返回 Observable?

javascript - 如何重置功能?

javascript - 三星 S4 "GetPTLAFormat: Invalid format"错误

javascript - 在 Javascript 中模拟子类化——看看我是怎么做到的?

iphone - 异步回调已解除的 View Controller ?

通过异步 curl 调用时 Php 脚本停止

javascript - 如何在 RxJs 中加入两半