Node.js 在循环中添加到对象

Node.js adding to an object within a loop

我好像想不通。我使用 Node、Express 和 Bluebird 来实现承诺。我想要做的是在一个循环中添加一个对象。当我控制日志时,我得到一个空对象。

我是不是做错了?

Promise.props({
    rewards: db.query("SELECT title, created_by FROM rewards WHERE team_id = '" + team_id + "'")
}).then(function(results) {
  
    var rewards = [],
    title = results.rewards[0].title;
    created_by = results.rewards[0].created_by,

    for (var i = 0; i < results.rewards.length; i++) {
       Promise.props({
           user: db.query("SELECT * FROM users WHERE uid = '" + results.rewards[i].created_by + "'")
       }).then(function(result) {
            rewards.push({
         created_by: created_by,
         title: title,
         username: result.user[0].username
            });
        });
    }
    console.log(rewards);
});

您正在尝试在工作完成之前控制日志。您需要先等待嵌套的承诺循环完成。

为此,将所有承诺收集到一个数组中并使用 Promise.all 知道它们何时全部完成


var promiseList = [];

for (var i = 0; i < results.rewards.length; i++) {

  // hold the promise in a variable
  var p = Promise.props({
    user: db.query("SELECT * FROM users WHERE uid = '" + results.rewards[i].created_by + "'")
  }).then(function(result) {
    rewards.push({
    created_by: created_by,
    title: title,
    username: result.user[0].username
  });

  // collect the promise
  promiseList.push(p);
}

// wait for all of them to finish
Promise.all(promiseList).then(function(){
  console.log(rewards);
});