关于async/await、promise和setTimeout执行顺序
先来一道关于async/await、promise和setTimeout的执行顺序的题目:1 async function async1() { 2 console.log(‘async1 start‘); 3 await async2(); 4 console.log(‘asnyc1 end‘); 5 } 6 async function async2() { 7 console.log(‘async2‘); 8 } 9 console.log(‘script start‘); 10 setTimeout(() => { 11 console.log(‘setTimeOut‘); 12 },0); 13 async1(); 14 new Promise(function (reslove) { 15 console.log(‘promise1‘); 16 reslove(); 17 }).then(function () { 18 console.log(‘promise2‘); 19 }) 20 console.log(‘script end‘); 执行结果:1 script start 2 async1 start 3 async2 4 promise1 5 script end 6 asnyc1 end 7 promise2 8 setTimeOut 首先,我们先来了解一下基本概念:js EventLoop 事件循环机制:JavaScript的事件分两种,宏任务(macro-task)和微任务(micro-task)
事件的执行顺序,是先执行宏任务,然后执行微任务,这个是基础,任务可以有同步任务和异步任务,同步的进入主线程,异步的进入Event Table并注册函数,异步事件完成后,会将回调函数放入Event Queue中(宏任务和微任务是不同的Event Queue),同步任务执行完成后,会从Event Queue中读取事件放入主线程执行,回调函数中可能还会包含不同的任务,因此会循环执行上述操作。
简单理解就是: 了解了什么是宏任务和微任务,就好理解多了,首先执行 宏任务 => 微任务的Event Queue?=> 宏任务的Event Queue promise、async/await
步入正题:根据图片显示我们来整理一下流程:
参考博客:https://blog.csdn.net/yun_hou/article/details/88697954 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |