Javascriptasynchronous执行:会有一个callback中断的运行代码吗?

我只是希望有人能为我澄清这一点。 如果我有下面的代码运行服务器端与node.js, 而不是在浏览器中

console.log("a"); db.get('select * from table1', function(result){ console.log("b"); }); console.log("c"); 

假定数据库调用是asynchronous的,我应该得到结果

 a c b 

但是,如果我将下面的行添加到我的代码的底部

 while(1); 

那么b永远不会执行,对吗?

如果你在谈论客户端JavaScript执行,你是正确的(直到浏览器决定停止你的无限循环)。

客户端JavaScript是单线程的,所以一个asynchronous的Ajax调用callback将不会执行,直到执行完成的主stream,一个新的JavaScript执行stream可以启动的Ajax事件,这将导致调用您的Ajaxcallback函数。

您可以阅读更多关于JavaScript如何使用事件队列来序列化这篇文章中的所有事件。

编辑

我从你的编辑中看到,你正在谈论的是服务器端的node.js,而不是浏览器的代码。 默认情况下,你的callback不会在一个新的线程中运行,所以它将作为db.get()函数调用的一部分立即执行,或者更有可能在你的当前执行stream完成之后才会执行,然后是db.get()调用也完成,然后可以执行callback。

node.js在某些情况下使用线程,并在内部使用线程,但在这种情况下不使用线程。

这里有一篇很好的关于node.js线程的文章 。