javascript - RxJS 相当于 Async.js mapLimit

标签 javascript asynchronous rxjs async.js

Async.js mapLimit及其家族 <name>Limit函数基本上像信号量一样工作:它们允许有限数量的任务同时运行,同时将额外的传入任务添加到队列中。队列成为(冷?连接?)生产者。任务运行器会在有空位(其中一个任务完成)后立即从队列中排出一个项目。

这样,有限数量的并发任务始终处于事件状态。

如何在 RxJS 中实现类似的功能?

最佳答案

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

关于javascript - RxJS 相当于 Async.js mapLimit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251466/

相关文章:

c++ - 从另一个任务创建任务 - 用线程池库替换 std::async 时出现死锁

c# - 递归调用 async-void : any guarantee on the stack limit?

javascript - Rxjs 可观察等待直到满足某些条件

angular - 对 Observable zip 订阅执行操作

rxjs 一个序列多个订阅取x

javascript - 动态加载外部js文件?

javascript - Node Js : how to execute functions async in the start of the server

javascript - 如何选择具有特定CSS属性的div

javascript - 从 jQuery 函数引用 Javascript "Class"方法

javascript - 使用 Dexie.js 处理请求队列异步