一道ES6的Promise笔试题的疑惑

发布于 2022-09-06 13:04:25 字数 293 浏览 10 评论 0

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 吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

樱娆 2022-09-13 13:04:25

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

雪落纷纷 2022-09-13 13:04:25

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

红尘作伴 2022-09-13 13:04:25

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

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

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

如梦初醒的夏天 2022-09-13 13:04:25

为什么是143?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文