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.
相关文章:
- 如何将一个JavaScript函数回调为多个函数
- 在另一个Find(..)的回调内部查找,如何逃离回调地狱
- 使用reactjs setState回调获取上一个输入值的计算值
- 正在读取<p: 选择一个菜单/>在onchange回调中
- Javascript使用本地存储,回调对象并用Json更改为一个字符串以用于填充函数
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- 如何使用另一个 JavaScript 文件中定义的类名调用回调函数
- Angular,设置一个回调函数,用于在工厂和控制器之间更新
- 如何运行一个调用某个函数的函数首先完成它,然后再调用下一个函数.正在创建回调函数
- 使用 CoffeeScript 的类和 jquery.transit 创建一个回调循环
- 如何通过一个回调异步排队和执行多个promise
- 如何在另一个函数的回调中调用JavaScript函数
- 自定义Cordova插件,释放一个保持回调而不调用它
- NodeJS将一个额外的参数传递给回调
- 编写一个使用传递两个参数的回调的承诺
- 带有一个回调的多个循环ajax请求
- 在另一个getJSON调用的回调中,没有为getJSON调用触发回调
- 仅在堆栈中的最后一个执行回调
- 我试图使用jquery或javascript回调一个简单的动画
- 我能给MVC Ajax回调一个参数吗?