1function promise1 () { 2 let p = new Promise((resolve) => { 3 console.log('promise1'); 4 resolve('1') 5 }) 6 return p; 7} 8function promise2 () { 9 return new Promise((resolve, reject) => { 10 reject('error') 11 }) 12} 13promise1() 14 .then(res => console.log(res)) 15 .catch(err => console.log(err)) 16 .finally(() => console.log('finally1')) 17 18promise2() 19 .then(res => console.log(res)) 20 .catch(err => console.log(err)) 21 .finally(() => console.log('finally2')) 22
参考答案:
promise1
和promise2
,先不管接着往下看。promise1
函数先被调用了,然后执行里面new Promise
的同步代码打印出promise1
resolve(1)
,将p
的状态改为了resolved
并将结果保存下来。promise1
内的函数内容已经执行完了,跳出该函数promise1().then()
,由于promise1
的状态已经发生了改变且为resolved
。因此将·promise1().then()·这条微任务加入本轮的微任务列表(这是第一个微任务).finally
加入微任务列表,那是因为.then
本身就是一个微任务,它链式后面的内容必须得等当前这个微任务执行完才会执行,因此这里我们先不管.finally()
promise2()
函数,其中返回的new Promise
中并没有同步代码需要执行,所以执行reject('error')
的时候将promise2
函数中的Promise
的状态变为了rejected
promise2
函数,遇到了promise2().catch()
,将其加入当前的微任务队列(这是第二个微任务),且链式调用后面的内容得等该任务执行完后才执行,和.then()
一样。promise1().then()
,执行它,打印出1,然后遇到了.finally()
这个微任务将它加入微任务列表(这是第三个微任务)等待执行promise2().catch()
打印出error
,执行完后将finally2
加入微任务加入微任务列表(这是第四个微任务)finally1
和finally2
。'promise1'
'1'
'error'
'finally1'
'finally2'
最近更新时间:2024-07-20