Javascript异步执行:将回调中断运行代码?

时间:2012-01-13 04:26:59

标签: javascript node.js

我只是希望有人能为我澄清一下。如果我在服务器端使用node.js运行以下代码,不在浏览器中

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

假设数据库调用是异步的,我应该得到结果

a
c
b

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

while(1);

然后b永远不会执行,我是对的吗?

1 个答案:

答案 0 :(得分:6)

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

客户端javascript是单线程的,因此异步ajax调用回调将不会执行,直到主流执行完成并且可以为ajax事件启动新的javascript执行流,这将导致调用ajax回调函数

您可以详细了解javascript如何使用事件队列序列化this post中的所有事件。

修改

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

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

这里是node.js中线程的good article