ForEach返回空数组 - Node.js

时间:2017-07-12 05:45:01

标签: node.js express

我正在使用节点异步功能。我通过迭代现有的数组形成新的数组。我想在回叫完成后返回新数组。 res.json(arr)响应空数组。帮我识别问题。

 getAllUsers(function(users) {
       var arr = [];
        async.forEach(users, function(user, callback) {
          var id = user._id;
          getAllCustomers(id, function(customers) {
            var count = customers.length;
            user.customers = count;
            arr.push(user);
          });
          callback();

        }, function(err) {
          console.log('iterating done');
          res.json(arr); // returns [], empty array
        });
      });

2 个答案:

答案 0 :(得分:1)

您的问题是,即使getAllCustomers未完成,您的callback也会被调用。请尝试以下方法:

getAllUsers(function(users) {
   var arr = [];
    async.each(users, function(user, callback) {
      var id = user._id;
      getAllCustomers(id, function(customers) {
        var count = customers.length;
        user.customers = count;
        arr.push(user);
        callback();
      });


    }, function(err) {
      console.log('iterating done');
      res.json(arr); // returns [], empty array
    });
  });

答案 1 :(得分:1)

你应该在getAllCustomers里面使用回调

getAllUsers(function(users) {
       var arr = [];
        async.forEach(users, function(user, callback) {
          var id = user._id;
          getAllCustomers(id, function(customers) {
            var count = customers.length;
            user.customers = count;
            arr.push(user);
          callback();

          });


        }, function(err) {
          console.log('iterating done');
          res.json(arr); // returns [], empty array
        });
      });