promise.then 我这样写很low,请教方法

这样也很别扭
    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>

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632