在node.js中,当函数调用之后还有一个无限循环时,它也会获得一个回调函数作为参数,即使操作完成,回调也不会触发。例如:
database.insert(data, function() {
//do stuff
})
while(1) {
//do stuff
}
在上面的例子中,回调函数用" //做东西"在其中,永远不会开火。 这让我对node.js被称为异步这一事实感到困惑。如果在有其他事情要做的时候它无法运行回调,它怎么能是异步的呢?
如果数据库插入是异步的,即使回调函数需要等待,那么如何提供并发性呢?
谢谢。
编辑:拼写错误
答案 0 :(得分:0)
Node.js是单线程的,因此它一次只能做一件事。如果你正在运行一个非常cpu密集的工作,也许你可以使用child_process在另一个进程中完成它?
否则,这不是真正推荐的,你可以将繁重的工作分解为同一个函数的多个调用并使用process.nextTick(),即:
function compute() {
// do work here
process.nextTick(compute);
}
compute();
这将允许事件循环处理您的计算之间的其他任务。