【问题标题】:nodejs request, loop & promisenodejs 请求、循环和承诺
【发布时间】:2016-05-08 17:07:30
【问题描述】:

我刚开始使用 NodeJS。我尝试用 NodeJS 做一个循环,然后:将我的结果发送到一个快速模板。

我尝试了许多 lib 和 Promise,但都没有奏效。节点在结束循环之前执行“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
    });
  });

【问题讨论】:

  • 你没有解决承诺,阅读文档
  • 谢谢,我做了,但不知道该怎么做。你能给我举个例子吗?

标签: javascript node.js loops request


【解决方案1】:

你需要 return request.get({... 而不仅仅是 request.get({

现在你的函数(pveId)返回未定义的方式,所以你的 Promise.map 只注册了一堆未定义的而不是实际的承诺。

您也不应该将 promise 与回调混用,使用 request-promise 而不是 request。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2018-08-04
    • 2021-04-19
    相关资源
    最近更新 更多