2016-03-27 14 views
4

Async.js mapLimitおよびそのファミリの<name>Limitは基本的にセマフォのように機能します。余分な着信タスクがキューに追加されている間に限られた数のタスクを同時に実行できます。キューは(コールドコネクト?)プロデューサになります。タスクランナーは、スポットが利用可能になるとすぐに(そのタスクの1つが終了する)、アイテムをキューから排出する。RxJS相当のAsync.js mapLimit

このように、限られた数の並行タスクが常にアクティブです。

RxJSで同様の機能を実現するにはどうすればよいですか?

+2

あなたは[ 'flatMapWithMaxConcurrent'](https://github.com/Reactive-Extensions/RxJS/のようななめらかを使用することができます確かにあなたがasyncの他の選択肢について知りたい場合は、このページを読むことができますhttp://xgrommx.github.io/rx-book/content/mappingr_rxjs_from_different_libraries/async /index.html – xgrommx

+0

@xgrommx便利なドキュメントを見ましたが、「制限」機能に相当するものは何もありません。 – homam

答えて

4

deferflatMapWithMaxConcurrentの組み合わせは、それを行うには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(...); 
関連する問題