mli*_*ihp 8 javascript node.js
我只是希望有人可以为我澄清一下.如果我有以下代码运行服务器端与node.js,而不是在浏览器中:
console.log("a");
db.get('select * from table1', function(result){
console.log("b");
});
console.log("c");
Run Code Online (Sandbox Code Playgroud)
假设数据库调用是异步的,我应该得到结果
a
c
b
Run Code Online (Sandbox Code Playgroud)
但是,如果我要将以下行添加到我的代码底部
while(1);
Run Code Online (Sandbox Code Playgroud)
然后b永远不会执行,我是对的吗?
如果您正在谈论客户端javascript执行,那么您是正确的(直到浏览器决定停止无限循环).
客户端javascript是单线程的,因此异步ajax调用回调将不会执行,直到主流执行完成,并且可以为ajax事件启动新的javascript执行流,这将导致调用ajax回调函数.
您可以阅读有关javascript如何使用事件队列来序列化此帖子中的所有事件的更多信息.
编辑
我从你的编辑中看到你说的是服务器端node.js,而不是浏览器代码.默认情况下,您的回调不会在新线程中运行,因此它将作为db.get()函数调用的一部分立即执行,或者更有可能在您当前的执行流完成后执行,然后db.get()调用也完成,然后回调可以执行.
node.js在某些情况下确实使用线程,并且在内部使用线程,但在这种情况下不使用.
这是关于node.js中线程的好文章.
| 归档时间: |
|
| 查看次数: |
2911 次 |
| 最近记录: |