满口金牙 2022-12-16 00:16 采纳率: 91.5%
浏览 25
已结题

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
    })
  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2022-12-16 09:25
    关注

    可以用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>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 已采纳回答 12月16日
  • 修改了问题 12月16日
  • 创建了问题 12月16日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值