Array 的 forEach 方法是异步的?

在 NodeJS 中写了一段数组循环的js代码,发现forEach打印的index值不是从零升序,去 Mozilla 社区查了一下也没说默认是async啊,ES6有这一条吗

打印index如下

2
6
3
8
1
0
5
7
15
4
10
13
11
...

源代码

//返回所有标签
Post.getTags = function(callback) {
  //打开数据库
  MongoClient.connect(connectionString, dbOptions, function(err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function (err, collection) {
      if (err) {
        db.close();
          return callback(err);
        }
      //distinct 用来找出给定键的所有不同值
      collection.distinct("tags", function (err, docs) {
        console.log(docs)
        if (err) {
          db.close();
          return callback(err);
        }
                var list = [];
                docs.forEach(function (val, index) {
                    db.collection('posts', function (err, collection) {
                        if (err) {
                            db.close();
                            return callback(err);
                        }
                        var count = collection.count({
                            "tags" : {
                                "$in" : [val]
                            }
                        }, function (err, total) {
                            var tag = {
                                "tag" : val,
                                "num" : total
                            }
                            list.push(tag);
                            console.log(index);
                            if (index === docs.length) {
                                callback(null, list);
                            }
                        })
                    });
                });
      });
    });
  });
};

docs 的值就是一个数组 ['js', 'css', ...]
缩进粘过来之后乱了,sorry

阅读 10.2k
1 个回答

你都把打印index的代码放到一个明显是异步的回调函数里了…

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏