Javascript异步执行:将一个回调中断运行的代码

Javascript asynchronous execution: will a callback interrupt running code?

本文关键字:回调 一个 中断 运行 代码 执行 异步 Javascript      更新时间:2023-09-26

我只是希望有人能帮我澄清这一点。如果我在服务器端用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.

中线程的好文章