【发布时间】:2016-03-20 15:36:35
【问题描述】:
我正在尝试创建一个处理并行 HTTP 请求的队列。
为每个 HTTP 请求生成一个请求对象,例如
{
method: 'POST',
uri: 'http://posttestserver.com/post.php',
body: {
some: 'foo'
},
json: true
}
我传入这些对象的数组并希望将它们添加到队列中,然后执行实际的请求。
问题:Promise.all 语句在返回之前等待所有请求完成。
问题:我希望将所有任务添加到队列中并在每个请求完成后返回,而不是全部等待。谁能建议如何将发出请求的逻辑与将任务添加到队列中分开?
注意:promise-queue 和 request-promise 都返回 Promise。
这是我所拥有的:
"use strict";
const Queue = require("promise-queue");
const rp = require('request-promise');
const maxConcurrent = 10;
const maxQueue = Infinity;
const queue = new Queue(maxConcurrent, maxQueue);
var options = [
{
method: 'POST',
uri: 'http://posttestserver.com/post.php',
body: {
some: 'foo'
},
json: true
},{
method: 'POST',
uri: 'http://posttestserver.com/post.php',
body: {
some: 'bar'
},
json: true
}
];
Promise.all(options.map(function(task) {
return queue.add(function() {
return rp(task);
})
}))
.then(function(response) {
log(response);
})
.catch(function(err) {
log(err);
});
function log(data) {
console.log(JSON.stringify(data, undefined, 4));
}
【问题讨论】:
-
尝试使用 Promise.race([p1,p2],callback) 从 Promise 列表中获取结果。
-
我的错误,Promise.race 只能从第一个“reloved”的 Promise 中得到结果
-
我正在为“每个请求完成后返回”而苦苦挣扎。
标签: node.js request queue promise es6-promise