一道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 吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
resolve(false)
只是把false这个值传下去了呀,走的还是console.log(2)
如果是
reject()
那就输出的是1 4 3then调用成功回调还是失败回调,是看调用的是resolve,还是reject,而不是看参数值
不然为什么
Promise(function(resolve, reject))
要2个参数题主的疑惑就在第一次 then 为什么进了 fullfill 函数得到了 2 而不是 rejected 得到 3
根据规范
resolve(false)
并不会走进下一个then
的reject
里面,根据 promise A+ 的规范,如果最终结果为false
是resolved
状态,最终会进入下一个 fullfill 函数https://promisesaplus.com/#the-promise-resolution-procedure 对应规范里面的 2.3.4 情况
为什么是143?