问答题843/1593【Promise第40题】下面代码的输出是什么?

1const p1 = new Promise((resolve) => { 2 setTimeout(() => { 3 resolve('resolve3'); 4 console.log('timer1') 5 }, 0) 6 resolve('resovle1'); 7 resolve('resolve2'); 8}).then(res => { 9 console.log(res) 10 setTimeout(() => { 11 console.log(p1) 12 }, 1000) 13}).finally(res => { 14 console.log('finally', res) 15}) 16
难度:
2022-01-09 创建

参考答案:

解析

  • Promise的状态一旦改变就无法改变
  • finally不管Promise的状态是resolved还是rejected都会执行,且它的回调函数是接收不到Promise的结果的,所以finally()中的res是一个迷惑项。
  • 最后一个定时器打印出的p1其实是.finally的返回值,我们知道.finally的返回值如果在没有抛出错误的情况下默认会是上一个Promise的返回值,而这道题中.finally上一个Promise是.then(),但是这个.then()并没有返回值,所以p1打印出来的Promise的值会是undefined,如果你在定时器的下面加上一个return 1,则值就会变成1。

结果

'resolve1'
'finally' undefined
'timer1'
Promise{<resolved>: undefined}

最近更新时间:2024-07-20

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!