1const 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 console.log(p) 9 }, 0) 10 resolve(1); 11 }); 12 resolve(2); 13 p.then((arg) => { 14 console.log(arg); 15 }); 16})); 17first().then((arg) => { 18 console.log(arg); 19}); 20console.log(4); 21
参考答案:
new Promise()
,因此先执行里面的同步代码3new Promise()
,直接执行里面的同步代码7resolve(1)
,这里就把p的状态改为了resolved,且返回值为1,不过这里也先不执行resolve(2)
,这里的resolve(2)
,表示的是把first函数返回的那个Promise的状态改了,也先不管它。p.then
,将它加入本次循环的微任务列表,等待执行first().then()
,将它加入本次循环的微任务列表(p.then的后面执行)p.then
和first().then()
,依次执行,打印出1和2Promise{<resolved>: 1}
。3
7
4
1
2
5
Promise{<resolved>: 1}
最近更新时间:2024-07-20