【发布时间】:2016-05-27 03:08:51
【问题描述】:
我有一个 id 数组,我想为每个 id 发出一个 api 请求,但我想控制每秒发出多少请求,或者更好的是,任何时候只有 5 个打开的连接,以及何时一个连接完成,获取下一个。
目前我有这个,它只是同时触发所有请求:
_.each([1,2,3,4,5,6,7,8,9,10], function(issueId) {
github.fetchIssue(repo.namespace, repo.id, issueId, filters)
.then(function(response) {
console.log('Writing: ' + issueId);
writeIssueToDisk(fetchIssueCallback(response));
});
});
【问题讨论】:
-
你想要有上限的并发承诺。查看ES6 Promise Pool,以及该页面上指定的替代列表。或者,您可以实现自己的计数信号量:D
-
我遇到了类似的问题,我需要对通过的聊天消息进行速率限制。有一种算法称为“漏桶”。 en.wikipedia.org/wiki/Leaky_bucket我认为这与您面临的情况相似。
-
@PatrickRoberts:我很惊讶没有人阅读我的链接 - ES6 Promise Pool 的 Alternatives 清楚地列出了 async 的
queue()。 -
@Amadan 那么你必须为我重新定义“清楚地”。这相当于期望我阅读细则。
标签: javascript node.js promise underscore.js throttling