使用async和request模块限制请求

4
我将结合 asyncrequest 模块以实现异步的API请求和速率限制。
以下是我的代码:
var requestApi = function(data){

    request(data.url, function (error, response, body) {

        console.log(body);

    });
};


async.forEachLimit(data, 5, requestApi, function(err){
      // do some error handling.
});

数据包含我发出请求的所有URL。使用forEachLimit方法将并发请求的数量限制为5。这段代码会先发送前5个请求,然后停止。

在异步文档中,它说“迭代器被传递一个回调函数,必须在完成后调用”。但是我不理解这个,我应该做什么来表示请求已经完成?


谢谢,我为同样的问题苦苦挣扎了数小时 :) - Sushant Gupta
1个回答

5
首先,您应该在迭代器函数中添加回调函数:
var requestApi = function(data, next){
    request(data.url, function (error, response, body) {
        console.log(body);
        next(error);
    });
};

next();或者next(null);告诉Async所有处理已经完成。如果error不为null,则next(error);表示出现了错误。

在处理完所有请求后,Async会调用其回调函数,并将err == null

async.forEachLimit(data, 5, requestApi, function(err){
    // err contains the first error or null
    if (err) throw err;
    console.log('All requests processed!');
});

异步调用在收到第一个错误或所有请求成功完成后立即调用其回调函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接