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

数据包含我请求的所有网址。我使用forEachLimit方法将并发请求数限制为 5 。此代码发出前 5 个请求,然后停止。

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

4

1 回答 1

5

首先,您应该向迭代器函数添加回调:

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

next();next(null);告诉 Async 所有处理都已完成。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!');
});

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

于 2012-09-25T19:10:29.167 回答