满口金牙 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 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程