1.知识点
事件循环:
- 由浏览器Web API管理的异步代码,如果有结果后,会根据这个异步代码的类型,被放入对应的微任务或宏任务当中。
- 当执行栈的任务(同步代码)全部执行完毕后,再执行完所有微任务的回调,然后再执行完所有宏任务的回调。
- 在一次循环当中,微任务永远在宏任务之前执行。
2.例题
1.
2.
3.
4.
5.
6.async和await,事件循环的综合
console.log('123')async function f() {console.log('start')await pconsole.log('end')}let p = new Promise((resolve) => {console.log('a')resolve('ok')}).then(function () {console.log('b')})console.log('456')setTimeout(function () {console.log('setTimeout1')}, 0)f()let p2 = new Promise((resolve) => {console.log('c')setTimeout(function () {resolve()console.log('setTimeout2')}, 0)}).then(function () {console.log('d')})console.log('789')