从for循环回送中的回调函数附加数据

时间:2016-06-06 21:57:38

标签: javascript node.js loopback

我正在尝试创建一个钩子,我在其中循环响应的每个结果,根据当前对象查找用户并将其作为另一个属性附加到最终响应。但是,异步调用不允许我发送正确的响应:

  Board.afterRemote('find',function(context,boards,next){
    var users = [];
    context.result.admin =[];
    var User = app.models.User;


    context.result.forEach(function(result){
      User.findOne({where:{id:result.adminId}},function(err,user){
        result.admin = user;
      });

    });
    console.log("result: "+JSON.stringify(context.result));
    next();

  });

如何将用户添加到context.result上的每个结果?

1 个答案:

答案 0 :(得分:1)

User.findOne和异步操作吗?如果是这样,我建议使用像async这样的异步控制流库来迭代结果并对每个项执行异步操作。它看起来像这样:

Board.afterRemote('find',function(context,boards,next){
    async.each(context.result, function(result, callback) {
        User.findOne({where:{id:result.adminId}},function(err,user){
          result.admin = user;
          callback(err) // Done with this iteration
        });
    }, function(err) { // Called once every item has been iterated over
        console.log("result: "+JSON.stringify(context.result));
        next();
    });
});