关于setTimeout和Promise执行顺序问题

mac2024-01-30  34

先看一段代码

console.log('打印' 1); setTimeout(function(){ console.log('打印' 2); }) new Promise(function(resolve,reject){ console.log('打印' 3); }).then( console.log('打印' 4));; console.log('打印' 10); new Promise(function(resolve,reject){ setTimeout(function () { console.log('打印' 5); }); }).then( console.log('打印' 6)); setTimeout(function(){ new Promise(function(resolve,reject){ console.log('打印' 7); }); })

执行结果:

可以看出Promise比setTimeout()先执行。

因为Promise定义之后便会立即执行,其后的.then()接着便会执行。

而setTimeout()是异步的。

导图要表达的内容用文字来表述的话:

同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数。当指定的事情完成时,Event Table会将这个函数移入Event Queue。主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。上述过程会不断重复,也就是常说的Event Loop(事件循环)。

 

更多专业前端知识,请上 【猿2048】www.mk2048.com
最新回复(0)