【发布时间】:2015-07-09 03:05:42
【问题描述】:
NodeJS 是否创建后台任务或子进程来执行回调函数? NodeJS如何执行下面的查询?
MyModel.find({}, function (err, docs) {
//Do some thing
});
【问题讨论】:
标签: node.js asynchronous callback background-process child-process
NodeJS 是否创建后台任务或子进程来执行回调函数? NodeJS如何执行下面的查询?
MyModel.find({}, function (err, docs) {
//Do some thing
});
【问题讨论】:
标签: node.js asynchronous callback background-process child-process
这个问题已经回答了很多次了……它不是 Mongoose 特有的,几乎每个 Javascript 库都这样做来处理异步调用。
看看 Philip Roberts 的 JSConf 演示文稿:https://www.youtube.com/watch?v=8aGhZQkoFbQ
它很好地解释了幕后实际发生的事情。
无论如何,Mongoose 基本上所做的是使用 Node.js MongoDB Native driver 查询 MongoDB,等待响应并使用从本机驱动程序收到的 err 和 doc 结果执行您的回调函数。
简单来说,Mongoose 只是原生驱动程序的一个包装器,让开发人员的工作更轻松。
【讨论】:
NodeJs 实现非阻塞i/o 以在单线程中实现这些回调。它使用事件循环。
nodejs 根据数据需求注册一个回调并将操作发送到这个事件循环。当数据可用时,回调被调用。
假设一个线程正在执行回调 A。它继续执行,并说它找到另一个异步任务。它为该异步任务注册新的回调 B。在等待 B 的数据的同时,它开始执行一些其他的回调 C。一旦 C 完成。然后检查B的数据是否可用。如果是,则执行 B。否则执行其他一些回调 D...等等..
阅读本文以深入了解http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
【讨论】: