含义:解决一个成功或者错误的状态
const req = new Promise((resolve, reject) => {
reject('no')
})
Promise.resolve(req) // 可能是成功,也可能是失败
.then(r => {
console.log(r)
})
.catch(e => {
console.log(e) // no
})
b站看见的一个例子:
场景:表单提交时,需要判断是否发送消息,如果需要,则等待发送完成后再提交表单
let needSendMsg = null
let clickBtn = 1
if(clickBtn) {
needSendMsg = new Promise((resolve) => {
setTimeout(() => {
console.log('send...')
resolve(true)
})
}).finally(()=>{
needSendMsg = null
})
}
if(needSendMsg) {
needSendMsg.then(() => {
console.log('submit')
})
} else {
console.log('submit')
}
优化
let needSendMsg = Promise.resolve()
let clickBtn = 1
if(clickBtn) {
needSendMsg = new Promise((resolve) => {
setTimeout(() => {
console.log('send...')
resolve(true)
})
}).finally(()=>{
needSendMsg = null // 这里是最后执行,清空就好。
})
}
needSendMsg.then(() => {
console.log('submit')
})
默认一个promise.resolve,如果有点击事件,则重新赋值为新的promise,否则还是有then函数,兼容了点击和不点击的情况.
减少了if判断,promise.resolve实现了promise包裹,不管结果如何,都有then方法可以调用。