题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
说明有错还请指正。。。。谢谢,仅供学习参考。