是否可以使用request.js发送批处理请求?

问题描述 投票:0回答:1

只是想知道是否可以用https://www.npmjs.com/package/request发送批处理请求?

我知道它已被弃用。但这满足了我到目前为止所需的一切。

批处理请求应按顺序发送。有效载荷采用JSON格式。而且我还必须继续进行批次响应。因此,必须解析批处理的响应。

提前感谢;)

javascript node.js request batch-processing request-promise
1个回答
0
投票

如果您要依次发出所有请求,并在使用它们之前将所有响应存储在数组中,则将其存储在数组中:

function batchRequest(allUrls, callback) {
  const results = [];

  (function loop(urls) {
    if (urls.length) {
      request(urls[0], function(error, response, body) {
        if (!error && response.statusCode == 200) {
          const res = JSON.parse(body);
          results.push(res);
        } else {
          console.log(error);
          results.push(null);
        }
        loop(urls.slice(1));
      });
    } else {
      callback(results);
    }
  })(allUrls);
}

// Usage
const urls = [
  'https://example.com/a',
  'https://example.com/b',
  'https://example.com/c'
];

batchRequest(urls, function(results) {
  console.log(results); // [{...a...}, {...b...}, {...c...}]
});

如果您想在它们到达时使用它们:

function batchRequest(allUrls, callback) {      
  (function loop(urls) {
    if (urls.length) {
      request(urls[0], function(error, response, body) {
        if (!error && response.statusCode == 200) {
          const res = JSON.parse(body);
          callback(res);
        } else {
          console.log(error);
        }
        loop(urls.slice(1));
      });
    }
  })(allUrls);
}

// Usage
const urls = [
  'https://example.com/a',
  'https://example.com/b',
  'https://example.com/c'
];

batchRequest(urls, function(result) {
  // Will be executed for each response
  console.log(result); // {...a...}
});

0
投票

该库中没有直接支持,但是您可以并行启动多个请求。如果您有lodash,则可以使用enter link description here将输入拆分为合适的批次大小。通过使用Promise(例如,通过request-promise),您可以使用await Promise.all(...)等待批处理完成。

(如您所说,request现在已过时。对于新代码,我建议您寻找替代方法。)

© www.soinside.com 2019 - 2024. All rights reserved.