Я пытаюсь создать очередь, которая обрабатывает параллельные HTTP-запросы.
Объект запроса создается для каждого HTTP-запроса, например.
{
method: 'POST',
uri: 'http://posttestserver.com/post.php',
body: {
some: 'foo'
},
json: true
}
Я передаю массив этих объектов и хочу добавить их в очередь, а затем выполнить фактический запрос.
ПРОБЛЕМА. Оператор Promise.all ожидает завершения всех запросов перед возвратом.
ВОПРОС: я хочу добавить все задачи в очередь и возвращаться после завершения каждого запроса, а не ждать их всех. Может кто посоветует, как отделить логику сделать запрос от добавления задач в очередь?
ПРИМЕЧАНИЕ: оба обещания-очереди и запрос-обещание возвращают обещания.
Вот что у меня есть:
"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));
}