微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-如何限制api请求的堆栈?

我有一个ID数组,我想为每个ID提出一个api请求,但是我想控制每秒发出多少个请求,或者更好的是,在任何时候,以及当一个连接是完成后,获取一个.

目前,我有这个功能,它可以同时触发所有请求:

_.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));
        });
});

解决方法:

就我个人而言,我会在并发选项中使用Bluebird的.map(),因为我已经在所有异步操作中使用了promise和Bluebird.但是,如果您想看看限制一次可同时运行多个并发请求的手动编码计数器方案是什么样子,请执行以下操作:

function limitEach(collection, max, fn, done) {
    var cntr = 0, index = 0, errFlag = false;

    function runMore() {
        while (!errFlag && cntr < max && index < collection.length) {
            ++cntr;
            fn(collection[index++], function(err, data) {
                --cntr;
                if (errFlag) return;
                if (err) {
                    errFlag = true;
                    done(err);
                } else {
                   runMore();
                }
            });
        }
        if (!errFlag && cntr === 0 && index === collection.length) {
            done();
        }
    }
    runMore();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐