【问题标题】:Node.js callback never fires unless the main code is executed除非执行主代码,否则 Node.js 回调永远不会触发
【发布时间】:2015-04-24 04:11:06
【问题描述】:

在 node.js 中,当函数调用后出现无限循环时,该函数调用也获取回调函数作为参数,即使操作完成,回调也不会触发。例如:

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

while(1) {
    //do stuff
}
  • 在上述情况下,其中包含“//do stuff”的回调函数永远不会触发。 这让我对 node.js 被称为 asynchronous 的事实感到困惑。有事做的时候不能跑回调怎么异步呢?

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

谢谢。

编辑:错别字

【问题讨论】:

  • 异步操作!=并发操作
  • 怎么样?我之前处理过很多线程的东西,而且它是物理并发的。即使这意味着在 IO 级别上实现了并发。

标签: node.js asynchronous callback


【解决方案1】:

Node.js 是单线程的,所以它一次只能做一件事。如果您正在运行一个 CPU 密集型作业,也许您可​​以使用 child_process 在另一个进程中执行它?

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

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

compute();

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

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多