我刚刚开始使用 NodeJS。我尝试使用 NodeJS 进行循环,然后:将结果发送到快速模板。
我尝试了很多库和 promise ,但没有一个起作用。 Node 在结束循环之前执行“then”...
这是我最后一次尝试,你能帮我吗?非常感谢。
[...]
//pveIds contains list of dailies id (object)
var pveIds = body.pve;
//init tab, will contain dailies title
var pveNames = [];
Promise.map(pveIds, function(pveId) {
// Promise.map awaits for returned promises as well.
request.get({
url: 'https://api.guildwars2.com/v2/achievements?id=' + pveId.id,
json: true
},
function(error, response, body) {
console.log('log 1: ' + body.name);
if (response.statusCode == 200) {
return body.name;
}
}).on('data', function(v) {
console.log('log 2: ' + v);
return v;
});
}).then(function(results) {
console.log("done");
console.log(results);
console.log("names tab:" + pveNames);
res.render('pve.ejs', {
names: pveNames
});
});
最佳答案
你需要
返回 request.get({...
而不仅仅是 request.get({
现在你的函数(pveId)返回未定义,因此你的 Promise.map 只是注册了一堆未定义的而不是实际的 promise 。
您也不应该将 promise 与回调混合在一起,使用请求 promise 而不是请求。
关于javascript - Nodejs 请求、循环和 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102490/