【发布时间】:2020-10-20 16:31:43
【问题描述】:
我在 mongoose db 中有两个集合。我必须找到集合中的所有文档。之后,我必须遍历所有文档以在第二个集合中找到相应的文档。为此,我正在考虑使用for 循环。但是,因为它本质上是blocking。我该如何执行我的任务。
const docs = await collection1.find({name:"asdf"})
for(let i=0;i<docs.length;i++){
const doc2 = await collection2.findOne({address:docs.address})
}
【问题讨论】:
-
根本没有阻塞!当数据库在循环内(
await collection2.findOne(...))检索结果时,主线程正在处理“其他事情”。 Async/await 不会阻塞事件循环,简单来说await只是对承诺和回调的嵌套进行糖衣,这样你的代码结构看起来“扁平”。在循环内(或代码中的任何位置)读取带有fs.readFileSync()的文件之类的操作会阻塞事件循环,但await并非如此。
标签: javascript node.js mongodb mongoose nonblocking