Javascript nodejs请求、循环&;承诺

Javascript nodejs请求、循环&;承诺,javascript,node.js,loops,request,Javascript,Node.js,Loops,Request,我只是从NodeJS开始。我试着用NodeJS做一个循环,然后:将结果发送到一个express模板 我尝试了许多自由和承诺,但没有一个奏效。节点在结束循环之前执行“然后…” 这是我最后一次尝试,你能帮我吗?非常感谢 [...] //pveIds contains list of dailies id (object) var pveIds = body.pve; //init tab, will contain dailies title var pveNames = []; Promise.

我只是从NodeJS开始。我试着用NodeJS做一个循环,然后:将结果发送到一个express模板

我尝试了许多自由和承诺,但没有一个奏效。节点在结束循环之前执行“然后…”

这是我最后一次尝试,你能帮我吗?非常感谢

[...]
//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
    });
  });
你需要
returnrequest.get({…
而不仅仅是
request.get({

现在,您的函数(pveId)返回未定义的,因此您的Promise.map只注册一堆未定义的,而不是实际的承诺


您也不应该将承诺与回调混为一谈,使用请求承诺而不是请求。

您没有解决承诺,请阅读docsThanks,我做了,但不知道如何做。您能给我举个例子吗?