【问题标题】:Limiting requests with the async and request modules使用 async 和 request 模块限制请求
【发布时间】:2012-09-17 08:15:36
【问题描述】:

我正在组合 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.
});

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

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

【问题讨论】:

  • 谢谢,我为同样的问题苦苦挣扎了好几个小时 :)

标签: node.js asynchronous callback request


【解决方案1】:

首先,你应该给你的迭代器函数添加回调:

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)。

在处理完所有请求后,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!');
});

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

【讨论】:

  • 优秀。这就是我需要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2018-07-16
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多