一道ES6的Promise笔试题的疑惑

console.log(1)
new Promise((resolve, reject) => {
  setTimeout(() => {
    // 标记flag
    resolve(false) 
  }, 0)
}).then(() => {
  console.log(2)
}, () => {
  console.log(3)
})
console.log(4)

此时代码输出是 1 4 2
标记flag处是resolve(false), 不应该输出是 1 4 3 吗?

阅读 2.7k
4 个回答

resolve(false)
只是把false这个值传下去了呀,走的还是console.log(2)
如果是reject()那就输出的是1 4 3

then调用成功回调还是失败回调,是看调用的是resolve,还是reject,而不是看参数值
不然为什么Promise(function(resolve, reject))要2个参数

题主的疑惑就在第一次 then 为什么进了 fullfill 函数得到了 2 而不是 rejected 得到 3

根据规范 resolve(false) 并不会走进下一个 thenreject 里面,根据 promise A+ 的规范,如果最终结果为 falseresolved 状态,最终会进入下一个 fullfill 函数

https://promisesaplus.com/#the-promise-resolution-procedure 对应规范里面的 2.3.4 情况

为什么是143?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题