经过网上的一些研究后,似乎Javascirpt的forEach循环阻塞了,但我的下面的代码证明了这一点:
我正在使用node js mongoDB驱动程序从我的集合中获取文档,这是一个数组(命名文档)
collectionInstance.find({}, function(err, documents) {
if (err || !documents) {
console.log('no documents found in the collection');
} else {
console.log('before');
documents.forEach(function(document) {
console.log('inside')
});
console.log('outside');
}
});
我想要的是什么:
before -> inside, inside, inside .... inside -> outside
它给了我什么:
before -> outside -> inside, inside, inside .... inside
为什么循环表现得像是非阻塞?
答案 0 :(得分:1)
Javascript的Array.prototype.forEach
是同步的(“阻止”),是的。但是Mongo的Collection.find
返回Cursor
,其.forEach
方法是异步的,基于回调。 Cursor.forEach
接受第二个回调,在您迭代所有结果后调用该回调:
documents.forEach(function (document) {
console.log('inside');
}, function () {
console.log('outside');
});