只是想知道是否可以用https://www.npmjs.com/package/request发送批处理请求?
我知道它已被弃用。但这满足了我到目前为止所需的一切。
批处理请求应按顺序发送。有效载荷采用JSON格式。而且我还必须继续进行批次响应。因此,必须解析批处理的响应。
提前感谢;)
如果您要依次发出所有请求,并在使用它们之前将所有响应存储在数组中,则将其存储在数组中:
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...}
});
该库中没有直接支持,但是您可以并行启动多个请求。如果您有lodash,则可以使用enter link description here将输入拆分为合适的批次大小。通过使用Promise(例如,通过request-promise),您可以使用await Promise.all(...)
等待批处理完成。
(如您所说,request
现在已过时。对于新代码,我建议您寻找替代方法。)