繁体   English   中英

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

[英]Javascript asynchronous execution: will a callback interrupt running code?

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

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

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

a
c
b

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

while(1);

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

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

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

您可以阅读有关javascript如何使用事件队列来序列化此帖子中的所有事件的更多信息

编辑

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

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

这是关于node.js中线程的好文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM