4
Async.js mapLimit及其系列的<name>Limit
函數基本上像信號量一樣工作:在額外的傳入任務添加到隊列時,它們允許有限數量的任務同時運行。隊列變成(冷連接?)製作者。只要一個點可用(任務完成之一),任務運行者就會從隊列中排出一個項目。RxJS相當於Async.js mapLimit
這樣,有限數量的併發任務總是處於活動狀態。
如何在RxJS中實現類似的功能?
Async.js mapLimit及其系列的<name>Limit
函數基本上像信號量一樣工作:在額外的傳入任務添加到隊列時,它們允許有限數量的任務同時運行。隊列變成(冷連接?)製作者。只要一個點可用(任務完成之一),任務運行者就會從隊列中排出一個項目。RxJS相當於Async.js mapLimit
這樣,有限數量的併發任務總是處於活動狀態。
如何在RxJS中實現類似的功能?
的defer
和flatMapWithMaxConcurrent
組合爲RxJs辦法做到這一點:
// returns a promise
function runSomeJob(input) { ... }
function runSomeJobObservable(input) {
return Rx.Observable.defer(function() {
return runSomeJob(input);
});
}
var inputStream = // some Rx.Observable
// only allow 5 jobs to run concurrently
var outputStream = inputStream
.flatMapWithMaxConcurrent(5, runSomeJobObservable);
ouputStream.subscribe(...);
當然您也可以使用像['flatMapWithMaxConcurrent']水木清華(https://github.com/Reactive-Extensions/RxJS/ blob/master/doc/api/core/operators/flatmapwithmaxconcurrent.md)如果您需要了解其他異步替代方法,您可以閱讀此頁http://xgrommx.github.io/rx-book/content/mappingr_rxjs_from_different_libraries/async /index.html – xgrommx
@xgrommx我已經看過您的有用文檔,但沒有提及任何與「限制」功能等效的內容。 –
homam