Node.js 除非执行主代码,否则永远不会触发回调
Node.js callback never fires unless the main code is executed
在node.js中,当一个函数调用后有一个死循环并且也得到一个回调函数作为参数时,即使操作完成,回调也不会触发。例如:
database.insert(data, function() {
//do stuff
})
while(1) {
//do stuff
}
在上面的例子中,带有“//do stuff”的回调函数永远不会触发。
这让我对 node.js 被称为 asynchronous 的事实感到困惑。如果在有其他事情要做时不能 运行 回调,它怎么可能是异步的?
如果数据库插入是异步的,即使回调函数需要等待,那么并发是如何提供的?
谢谢。
编辑:拼写错误
Node.js是单线程的,所以一次只能做一件事。如果您 运行 是一项非常 cpu 密集型工作,也许您可以使用 child_process?
在另一个流程中完成
否则,实际上并不推荐这样做,您可以将繁重的工作分解为对同一函数的多次调用并使用 process.nextTick(),即:
function compute() {
// do work here
process.nextTick(compute);
}
compute();
这将允许事件循环在您的计算之间处理其他任务。
在node.js中,当一个函数调用后有一个死循环并且也得到一个回调函数作为参数时,即使操作完成,回调也不会触发。例如:
database.insert(data, function() {
//do stuff
})
while(1) {
//do stuff
}
在上面的例子中,带有“//do stuff”的回调函数永远不会触发。 这让我对 node.js 被称为 asynchronous 的事实感到困惑。如果在有其他事情要做时不能 运行 回调,它怎么可能是异步的?
如果数据库插入是异步的,即使回调函数需要等待,那么并发是如何提供的?
谢谢。
编辑:拼写错误
Node.js是单线程的,所以一次只能做一件事。如果您 运行 是一项非常 cpu 密集型工作,也许您可以使用 child_process?
在另一个流程中完成否则,实际上并不推荐这样做,您可以将繁重的工作分解为对同一函数的多次调用并使用 process.nextTick(),即:
function compute() {
// do work here
process.nextTick(compute);
}
compute();
这将允许事件循环在您的计算之间处理其他任务。