javascript - Javascript foreach 异步行为问题

标签 javascript node.js mongodb foreach

经过一些在线研究后,似乎 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/

相关文章:

javascript - React - 未找到模块,对于已安装包内的包,当需要 Express 时

javascript - 通过 http 流式传输音频时设置 currentTime 不起作用

javascript - jQuery 简单的 ajax 请求不起作用

Javascript - 异常/错误数据类型?

javascript - Owl Carousel - 多个 slider 不同的控制

javascript - 通过 CSJS 从属性文件中的条目获取值

javascript - 如何在Node中更改音频WAV文件的音高?

javascript - 当数据库中有\n 时,在浏览器中显示新行 <br>

用于创建网页的 PHP 脚本无法正常工作

php - 实现类似 goMongoDB 的查询表达式对象评估