JSON数组的异步迭代
Posted
技术标签:
【中文标题】JSON数组的异步迭代【英文标题】:Asynchronous Iteration of Array of JSON 【发布时间】:2014-08-28 11:59:07 【问题描述】:我在 MongoDB 中使用 Node.js,更具体地说,是 MongoLab 和 Mongoose。
在数据库中,我有两个集合,pours 和 users。一个用户对象将通过共享 cid 链接到多个浇筑对象。
我需要遍历一组用户对象。但是 for 循环不知何故不适用于我想用来修改数组的异步函数。
express.leaderboard = new Array();
mongoose.Users.find(function(err, users)
for (var i = 0; i < users.length; i++)
express.leaderboard[express.leaderboard.length] = users[i];
;
for (i = 0; i < express.leaderboard.length; i++)
updateOunces(i, function(a, fluidOunces)
console.log(a);
express.leaderboard[a].set('totalOunces', fluidOunces);
);
);
这是我的函数,它将检索用户的总流体盎司数。
function updateOunces(i, callback)
//console.log(express.leaderboard[b].cid);
mongoose.Pours.find(
"cid": express.leaderboard[i].cid
).exec(function(err, result)
var userOunces = 0.0;
if (!err)
for (i = 0; i < result.length; i += 1)
for(j = 0; j < result[i].pour.length; j += 1)
userOunces += result[i].pour[j].fluidOunces;
callback(i, userOunces);
return;
express.leaderboard[i].set ('totalOunces' , userOunces);
else
console.log(err)
;
);
;
有没有办法迭代并为排行榜数组中的每个对象添加一个新属性?使用异步?谢谢!
【问题讨论】:
javascript closure inside loops – simple practical example的可能重复 【参考方案1】:使用async 库。
示例)
mongoose.Users.find(function(err, users)
async.each(users, function(user, callback)
// perform updates here, per user.
callback();
, function(err)
// everything is complete.
);
);
【讨论】:
我知道它是如何工作的,但是我怎样才能使用第二个函数来实现它呢?请注意,我正在尝试使用从 mongo 检索到的信息更新我的本地数组。所以我有两个异步函数。 您可以嵌套异步调用,只需将回调调用一个不同的名称。比如nestedCallback
。以上是关于JSON数组的异步迭代的主要内容,如果未能解决你的问题,请参考以下文章
对于每个数组值,检查它是不是在 json 数组中。如果是跳过 json 数组进行下一次迭代
使用 Flutter FutureBuilder 迭代 JSON 中的对象数组