原来的逻辑
const req = () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log('req end')
resolve(true)
}, 500)
})
const confirmDialog = (isConfirm) => {
return new Promise((resolve, reject) => {
if(isConfirm) {
resolve(true)
} else {
reject(null)
}
})
}
async function isAuth() {
const isConfirm = true
let hadAuth = await req()
return new Promise((resolve) => {
if(hadAuth) {
confirmDialog(isConfirm).then(() => {
console.log('jump to url')
}).catch(e => {
resolve(false)
})
} else {
resolve(true)
}
})
}
async function handleSubmit() {
const hadAuth = await isAuth()
if(!hadAuth) return console.log("notAuth")
console.log('hadAuth! continue...')
}
handleSubmit()
优化:
const req = () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log('req end')
// resolve(true) // 已认证
resolve(false) // 未认证
}, 500)
})
const confirmDialog = (isConfirm) => {
return new Promise((resolve, reject) => {
if(isConfirm) {
resolve(true)
} else {
reject(null)
}
})
}
async function isAuth() {
// 未认证需要弹窗确认则跳转认证页面,取消则留在当前页面
const isConfirm = false // 取消
// const isConfirm = true // 确认
let hadAuth = await req()
if(hadAuth) return true
let hadConfirm = await confirmDialog(isConfirm)
if(hadConfirm) return console.log('jump to url')
}
async function handleSubmit() {
const hadAuth = await isAuth().catch(()=>{}) // 里面不用返回promise,有async-await的函数则表示该函数是promise包裹,可以使用await去等待。
if(!hadAuth) return console.log("notAuth")
console.log('hadAuth! continue...')
}
handleSubmit()