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 吗?
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 吗?
then调用成功回调还是失败回调,是看调用的是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 情况
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
resolve(false)
只是把false这个值传下去了呀,走的还是console.log(2)
如果是
reject()
那就输出的是1 4 3