2012-09-25 99 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