sails.js + underscore.js无法将哈希项添加到数组中

时间:2013-12-08 19:58:36

标签: javascript node.js underscore.js sails.js

我正在尝试将一些额外的变量添加到名为“cities”的项目列表中,然后再返回到我的新sails.js应用程序中的客户端。 Sails.js使用Underscore.js进行基本的函数式编程。

这是我目前使用的_.each。 (我首先尝试使用_.map并返回用户,但这也不起作用)。

控制台正确记录每个用户,但在_.each情况“[]”中cities_with_count为空,在_.map情况下为两个未定义的“[undefined undefined]”

    User.findByIdIn(user_ids).then(function(users){
    var users_with_counts = []
    _.each(users, function(user) {
      Candy.count({ type: "yummy").then(function(candy_count){
        user.candy_count = candy_count
        console.log(user);
        users_with_count.push(user);
      });
    });

    console.log(users_with_count);
    res.view({
      users: users_with_count
    });
  });

1 个答案:

答案 0 :(得分:0)

下划线同步循环用户,然后为每个用户发出异步请求:

Candy.count({ type: "yummy").then(function(candy_count){
...
});

当_.each循环结束时,请求可能不一定都处理完毕,因为无法知道答复何时来自后端以及以何种顺序。

当代码进入数组时,users_with_counts尚未填充,导致不必要的行为。

处理这些场景的一种方法是使用计数器来查看所进行的计数查询次数,并仅在所有查询完成时继续使用逻辑。要么执行seInterval并定期检查计数器的值,要么在填充数组后添加if条件以查看程序是否可以继续。

但如果发生错误,您的程序将会挂起,最好的长期选项是使用promises库,例如q