Node.js 中的 Promise 和数组
Posted
技术标签:
【中文标题】Node.js 中的 Promise 和数组【英文标题】:Promises and arrays in Node.js 【发布时间】:2015-10-28 14:28:27 【问题描述】:我正在使用 Bluebird 并请求 npm 包:
var Promise = require('bluebird');
var request = Promise.promisify(require('request'));
Promise.promisifyAll(request);
我有一个输出到 REST 端点并返回一些数据的函数:
var getData = function()
options.url = 'http://my/endpoint';
options.method = 'GET'; //etc etc...
return request(options);
;
getData().then(function(response)
console.log(response); //-> this returns an array
);
response
是一个由 REST 端点返回的数组。问题是现在我想对数组中的每个项目进行第二次请求,例如:
var getIndividualData = function(data)
data.forEach(function(d)
options.url = 'http://my/endpoint/d'; //make individual requests for each item
return request(options);
);
;
上述当然不起作用,我明白为什么。但是,我不明白如何才能使这项工作。理想情况下,我想要的是一条链,例如:
getData().then(function(response)
return getIndividualData(response);
).then(function(moreResponse)
console.log(moreResponse); // the result of the individual calls produced by getIndividualData();
);
【问题讨论】:
【参考方案1】:您可以使用Promise.all 等待一系列承诺完成。
getData()
.then(getIndividualData)
.then(function(moreResponse)
// the result of the individual calls produced by getIndividualData();
console.log(moreResponse);
);
function getIndividualData(list)
var tasks = list.map(function(item)
options.url = // etc.
return request(options);
);
return Promise.all(tasks);
【讨论】:
以上是关于Node.js 中的 Promise 和数组的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 无法使用 Promise、Mongoose 和 GET 请求推送到全局数组
如何使用 promise 将数组从我的模块返回到我的 API?异步函数和承诺 - Node.js