经过一些在线研究后,似乎 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
为什么循环的行为就像是非阻塞的?
最佳答案
Javascript 的 Array.prototype.forEach
是同步的(“阻塞”),是的。但是 Mongo 的 Collection.find
返回 Cursor
其 .forEach
方法是异步且基于回调的。 Cursor.forEach
接受一个第二个回调,在迭代完所有结果后调用该回调:
documents.forEach(function (document) {
console.log('inside');
}, function () {
console.log('outside');
});
关于javascript - Javascript foreach 异步行为问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124842/