我将 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 个请求,然后停止。
在异步文档中,它说“迭代器传递了一个回调,一旦它完成就必须调用它”。但我不明白这一点,我应该怎么做才能表示请求已完成?

最佳答案

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

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!');
});

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

关于node.js - 使用 async 和 request 模块限制请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12589280/

10-16 14:23
查看更多