【发布时间】:2015-11-21 15:01:33
【问题描述】:
我想通过一系列异步/网络操作(远程 HTTP 请求)移动对象数组来处理它们。
在其中一些操作中,我希望确保同时处理的项目不超过 X 个。
我怎样才能做到这一点?
示例代码:
function someAsyncOp(item) {...} // returns a promise
var source = Rx.Observable.from([{item1},{item2},...])
source
.flatMap((item) => {
// I WANT THE FOLLOWING OPERATION TO BE EXECUTING
// ON AT MAX 10 ITEMS AT A TIME, NEXT ITEM SHOULD
// BE SUBMITTED ONLY WHEN A SLOT GETS FREED AS A
// RESULT OF THE PROMISE SUCCEEDING OR FAILING
return Rx.Observable.fromPromise(someAsyncOp(item))
})
.subscribe(
console.log,
console.error,
() => console.log('completed')
)
【问题讨论】:
-
把take(X)放在.flatMap之前see interactive diagramm
-
@valery.sntx 这将在第一个 X 之后停止我的源流,这意味着永远不会处理所有后续项目。我猜。我希望处理所有项目。
标签: javascript concurrency promise rxjs