在 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
你都把打印index的代码放到一个明显是异步的回调函数里了…