Node.js(ES6) – 用Promise.all保证控制stream

我正在尝试创build一个处理并行HTTP请求的队列。

为每个HTTP请求生成一个请求对象,例如

{ method: 'POST', uri: 'http://posttestserver.com/post.php', body: { some: 'foo' }, json: true } 

我传入这些对象的数组,并希望将它们添加到队列中,然后执行实际的请求。

问题 :Promise.all语句在返回之前等待所有请求完成。

问题 :我希望将所有任务添加到队列中,并在每个请求完成后返回 ,而不是等待它们全部。 任何人都可以build议如何分开逻辑,使请求从任务添加到队列?

注意: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)); } 

我build议在forEach循环中调用promise链,就像这样:

 var queueTask = function(task) { // returns a promise return queue.add(function() { return rp(task); }); }; var logResponse = function(response) { console.log(response); }; var catchErrors = function(err) { console.log(err); }; options.forEach(opt => { queueTask() .then(logResponse) .catch(catchErrors); })