传递数据以异步方式在sailsjs中查看

时间:2014-04-10 21:14:17

标签: asynchronous sails.js

我只想在计算数据时才将数据传递给res.view。

代码:

followers: function(res, req, next){
    var data = [];
    var me = req.session.user;
    for(var i = 0; i<me.followers.length; i++){
      User.findOneById(me.followers[i], function foundUser(err, user){
          if(err) return next(err);
          followers.push(user)
          console.log(user)
      });
    }
    res.view({
      data: data
    })
}

问题是res.view在for循环执行之前呈现。我一直在摸索着想办法解决这个问题但是没有运气。请不要向我推荐ajax路线,因为这是我不想使用的东西。

2 个答案:

答案 0 :(得分:1)

您的代码中不需要for循环;它可以在一个查询中完成。然后,当您有结果时,您可以渲染视图:

followers: function(res, req){
    var me = req.session.user;
    // Use an "in" query to find all users 
    // whose id is in the array "me.followers"
    User.find({id: me.followers}).exec(function (err, users){
        // Don't call "next" in your controller--send a response instead
        if(err) return res.serverError(err);
        // Send the array of users to your view as the "data" var
        return res.view({data: users});
    });
}

答案 1 :(得分:0)

尝试使用https://github.com/caolan/async中的async.series,只有在for循环执行完成后才能运行res.view。