我正在使用节点异步功能。我通过迭代现有的数组形成新的数组。我想在回叫完成后返回新数组。 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
});
});
答案 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
});
});