我只是希望有人能为我澄清一下。如果我在服务器端使用node.js运行以下代码,不在浏览器中:
console.log("a");
db.get('select * from table1', function(result){
console.log("b");
});
console.log("c");
假设数据库调用是异步的,我应该得到结果
a
c
b
但是,如果我要将以下行添加到我的代码底部
while(1);
然后b永远不会执行,我是对的吗?
答案 0 :(得分:6)
如果您正在谈论客户端javascript执行,那么您是正确的(直到浏览器决定停止无限循环)。
客户端javascript是单线程的,因此异步ajax调用回调将不会执行,直到主流执行完成并且可以为ajax事件启动新的javascript执行流,这将导致调用ajax回调函数
您可以详细了解javascript如何使用事件队列序列化this post中的所有事件。
修改强>
我从您的编辑中看到您正在谈论服务器端node.js,而不是浏览器代码。默认情况下,您的回调不会在新线程中运行,因此它将作为db.get()
函数调用的一部分立即执行,或者更可能在您当前的执行流完成之后执行,然后{{ 1}}调用也已完成,然后可以执行回调。
node.js在某些情况下确实使用线程,并且在内部使用线程,但在这种情况下不会使用线程。
这里是node.js中线程的good article。