js事件执行机制事例

103 阅读1分钟

题1:

1. const first = () => (new Promise((resolve, reject) => {
2.     console.log(3)
3.     let p = new Promise((resolve, reject) => {
4.        console.log(7)
5.        setTimeout(() => {
6.             console.log(5)
7.             resolve(6)
8.         }, 0)
9.         resolve(1)
10.    })
11.    resolve(2)
12.    p.then((arg) => {
13.         console.log(arg)
14.     })
15. }))
16. first().then((arg) => {
17.    console.log(arg)
18. })
19. console.log(4)

说明:

    宏队列: dom事件回调    ajax回调  定时器回调

    微队列: Promise回调    mutation回调

首先必须执行所有的初始化同步任务代码, 再执行位队列,再执行宏队列

因此首先开始执行16行代码,首先输出 “3” , 再依次输出 “7”, 接着输出 “4”, 初始化的代码执行完了,再看微队列,因为setTimeout是宏队列,因此最后输出,紧接着执行 “resolve(1)”

输出 “1”, 再执行 “resolve(2)”, 输出 “2”, 最后宏队列,输出 “5” ,因为Promise的状态只能改变一次,所以 “resolve(6)” 不会执行

打印结果为:3 7 4 1 2 5

说明有错还请指正。。。。谢谢,仅供学习参考。