2016-03-27 6 views
4

Async.js mapLimit ve ailesi <name>Limit işlevleri temel olarak bir semafor gibi çalışır: sınırlı sayıda görevin eşzamanlı olarak çalışmasına izin verirken, ek gelen görevler sıraya eklenir. Sıra bir (soğuk bağlı?) Yapımcı olur. Görev koşucusu, bir nokta kullanılabilir hale gelir gelmez (bir görev tamamlandığında) bir öğeyi kuyrudan alır.RynJK eşdeğeri Async.js mapLimit

Bu sayede sınırlı sayıda eşzamanlı görev her zaman etkindir.

RxJS'de benzer bir işlevselliği nasıl sağlayabilirim?

+2

sen [ 'flatMapWithMaxConcurrent'] gibi smth (kullanabilirsiniz Emin https://github.com/Reactive-Extensions/RxJS/ blob/master/doc/api/core/operatörler/flatmapwithmaxconcurrent.md) ayrıca async için diğer alternatifleri bilmeniz gerekiyorsa bu sayfayı okuyabilirsiniz http://xgrommx.github.io/rx-book/content/mappingr_rxjs_from_different_libraries/async /index.html – xgrommx

+0

@xgrommx Yararlı belgelerinizi gördüm, ancak Limit fonksiyonlarına eşdeğer bir şeyden bahsetmiyoruz. – homam

cevap

4

defer ve flatMapWithMaxConcurrent kombinasyonu bunu yapmak için RxJs yoludur:

// 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(...);