node.js - 当 native JS .forEach() 阻塞时,MongoDb 游标方法 .forEach() 是非阻塞的

标签 node.js mongodb

我正在使用 mongodb 的 node.js 驱动程序。我在下面得到了非阻塞行为。这是因为 Node.js 驱动程序 api 的原因吗?有阻止的 api/选项吗? 我想避免过度使用 promise 并避免仅针对 array.forEach() 的 promise 。

User.prototype.findUsername = function(user) {
  return this.collection.find(user);
};


function deleteUser() {
  var deleteDocs;
  var document = user.findUsername({'username': 'bob123'});
  document.forEach(function(mydoc) {
    mydoc.pets.forEach(function(doc) {
      console.log(doc.data)
      deleteDocs = doc.data;
    });
  })
  return deleteDocs;
}
<小时/>
bob = api.deleteUser();
console.log("outside of the function- "  + bob)
<小时/>
outside of the function- undefined
[ 56da547268b9d17317d05f28 ]

最佳答案

MongoDB 的 forEach 是同步的,因为它执行 IO,而在 Node.js 中(通常)是异步的。原生 forEach (Array.prototype.forEach) 不执行任何 IO,这就是它是同步的原因。

关于node.js - 当 native JS .forEach() 阻塞时,MongoDb 游标方法 .forEach() 是非阻塞的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35820035/

相关文章:

mongodb - 使用 Mongodb 将 AWS Amplify 和 App Sync 与现有节点服务器结合使用

javascript - 将 findOneAndUpdate 与不同的字段值一起使用

node.js - 如何从 Node 中的 Mongo 访问 `findAndModify` 方法(使用 Mongoose)?

node.js - 通过(全局)shell脚本启动 Node 时如何禁用警告

javascript - 诗农.js : How to mock a object constructed with new?

javascript - 'chunked' 响应进入 AngularJS 后立即显示的方法是什么?

node.js - PM2 重建应用程序时显示旧版本

java - 如何使用 MongoDB Java 驱动程序按 ISODate 属性上的 dayOfYear 进行分组?

MongoDB 索引多输入搜索

node.js - 从node.js中的Elasticsearch数组中删除元素