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 中的对象数组

在 SwiftUI 上迭代 JSON 数组(使用 SwiftyJson 解析)

Android/Java 中的 JSON 数组迭代

Android/Java 中的 JSON 数组迭代

迭代JSON数组对象