这样也很别扭
const p = new Promise((resolve, reject) => {
getGroupRole({ gr_id: e.id }).then((res) => { // axios
if (res.data.role == 'general.admin') {
warningInfo(t('general.no_permission.admin'))
reject('不是管理员')
}
}) // 外面不套个promise, 仅在这加.then ,又没有reject,
}).then(() => {
console.log('运行到这了')
// ... 继续在这向后端 axios
// teamDetails.value = true
// groupStore.value = e
})
可以用aysnc+await+Promise来改造下,变成像函数编程一样明了一些
<script>
function getGroupRole({ gr_id=null}) {
return new Promise((resolve, reject) => {
setTimeout(() => {
let rnd = Math.random(); console.log(rnd)
if (rnd > .5) resolve({ data: { role: Math.random()>.5?'admin': 'general.admin' } });
else reject({ error:'reject' });
}, 1000)
})
}
function warningInfo(msg) { console.log(msg) }
function t(msg) { return msg }
//内部用到await语句的函数需要用async来修饰函数
async function business(e) {
try {
let res = await getGroupRole({ gr_id: e.id });
console.log(res)
if (res.data.role == 'general.admin') {
warningInfo(t('general.no_permission.admin'))
//reject('不是管理员')//这里不知道这里外部逻辑,async实际返回也是promise,直接throw 错误抛给外部获取
throw 'business-error-不是管理员'
}
console.log('运行到这了')
// ... 继续在这向后端 axios
// teamDetails.value = true
// groupStore.value = e
return '执行成功返回值'
}
catch (ex) {//getGroupRole中Promise中如果reject用catch获取
console.log('business-error', ex)
throw 'getGroupRole执行失败';
}
}
async function myBusiness(e) {
try {
let result = await business(e);
console.log('success',result)
}
catch (ex) {
console.log('error',ex)
}
}
myBusiness({ id: 111 })
</script>
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!