我如何在 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/