我如何替换 sails 中从数据库返回的一些属性

how do i replace some properties returned from database in sails

所以我正在尝试替换从 sails 中的数据库查询的数据的字段。

async.waterfall( [
    function getscores(callback) {
        Score.find({course : courseId}).paginate({page : 1 , limit: 10}).populate('course')
               .exec(function(err,data) {
                  callback(null,data);
        });
}
, function addUserInfo(result,callback) {

    for(var i=0; i < result.length; i++){
      result[i].user = User.findOne({id : result[i].user}).exec(function(err,data) {
          var temp = {
            "name" : data.name,
            "id" : data.id,
            "user_id" : data.user_id
          }
          return temp;
      });

    }
    res.json(messageGenerator(200, 'Sucecss', result));
}],function(err) {
  console.log(err);
}
);

第一个函数 'getScores' return 是分数数组,但每个分数 属性 只有一个用户 ID。现在在 addUserInfo 函数中,我希望能够将用户名添加到分数 属性.

但是上面的代码没能return里面的用户。 score 的用户 属性 为空。我相信在程序添加用户之前已经发送了响应属性(由于数据库适配器的异步性)。

经过简短的评论聊天后,addUserInfo 函数的以下替换应该可以帮助您实现您想要的:

function addUserInfo(results,callback) {
  async.map(results, function(result, callback) {
    User.findOne({id : result.user}).exec(function(err, data) {
      callback(err, Object.assign(result, {
        "user": {
          "name" : data.name || null,
          "id" : data.id || null,
          "user_id" : data.user_id || null
        }
      }));
    });
  }, function(err, output) {
    return res.json(messageGenerator(200, "Success", output))
  });
}

异步映射允许我们异步迭代结果,允许我们通过提供 callback 和新的 result 作为第二个参数来修改 result。 Final 函数是我们的最终回调,它提供了沿途发生的任何 err 和我们的新数组 output.