除非执行主代码,否则Node.js回调永远不会触发

时间:2015-02-22 21:37:16

标签: node.js asynchronous callback

在node.js中,当函数调用之后还有一个无限循环时,它也会获得一个回调函数作为参数,即使操作完成,回调也不会触发。例如:

database.insert(data, function() {
    //do stuff
})

while(1) {
    //do stuff
}
  • 在上面的例子中,回调函数用" //做东西"在其中,永远不会开火。 这让我对node.js被称为异步这一事实感到困惑。如果在有其他事情要做的时候它无法运行回调,它怎么能是异步的呢?

  • 如果数据库插入是异步的,即使回调函数需要等待,那么如何提供并发性呢?

谢谢。

编辑:拼写错误

1 个答案:

答案 0 :(得分:0)

Node.js是单线程的,因此它一次只能做一件事。如果你正在运行一个非常cpu密集的工作,也许你可以使用child_process在另一个进程中完成它?

否则,这不是真正推荐的,你可以将繁重的工作分解为同一个函数的多个调用并使用process.nextTick(),即:

function compute() {
     // do work here
     process.nextTick(compute);
}

compute();

这将允许事件循环处理您的计算之间的其他任务。