听说你很懂promise(十)

下面代码运行结果是多少

Promise.resolve().then(()=>{
  console.log(0);
  return Promise.resolve(3).then(()=>{
    console.log('aa')
  }).then(()=>{
    console.log('bb')
    return 4;
  })
}).then((res)=>{
  console.log(res);
})

Promise.resolve().then(()=>{
  console.log(1)
}).then(()=>{
  console.log(2)
}).then(()=>{
  console.log(3)
}).then(()=>{
  console.log(5)
})

答案:‘0 1 aa 2 bb 3 5 4’,
‘1.每个then都会返回一个新的promise’,
‘2.当一个promise吸收一个thenable对象的时候(带有then方法,promise就是thenable),会在下一个微任务中调用它的then方法’,
‘先将代码翻译一下’,

const p1=Promise.resolve();
const p2=p1.then(()=>{
  console.log(0);
  const p9=Promise.resolve(3)
  const p10=p9.then(()=>{
    console.log('aa')
  })
  const p11=p10.then(()=>{
    console.log('bb')
    return 4;
  })
  return p11;
})
const p3=p2.then((res)=>{
  console.log(res);
})

const p4=Promise.resolve()
const p5=p4.then(()=>{
  console.log(1)
})
const p6=p5.then(()=>{
  console.log(2)
})
const p7=p6.then(()=>{
  console.log(3)
})
const p8=p7.then(()=>{
  console.log(5)
})

‘控制台|微任务’,
’ | p1.then p4.then’,
‘0 1 | p9.then 下一次执行p11.then方法(return p11) p5.then’,
‘aa 2 | p10.then p11.then(此时的p11没有完成,相当于给p11挂载了一个then方法) p6.then’,
‘bb 3 | p11.then(吸收4) p7.then’,
‘5 | p2.then’,
‘4’


更多前端面试题,微信搜索小程序【坤坤前端笔记】,随时刷题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值