2012-09-25 70 views
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个请求停止。

在异步文档中,它表示“迭代器传递一个回调函数,一旦它完成就必须调用它”。但我不明白这一点,我该怎么做才能表明请求已完成?

+0

谢谢,我一直在努力与同样的问题几个小时:) –

回答

5

首先,你要添加的回调到你的迭代器功能:

var requestApi = function(data, next){ 
    request(data.url, function (error, response, body) { 
     console.log(body); 
     next(error); 
    }); 
}; 

next();next(null);告诉异步,所有的处理完成。 next(error);表示错误(如果error不是null)。

处理所有请求后异步调用的回调函数与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!'); 
}); 

异步调用其回调立即收到第一个错误后或毕竟请求成功地完成。

+0

优秀。这就是我需要的。谢谢。 – saeed