这样对async await的错误进行处理可行吗?

PainAndLove
  • 358

在使用async await进一步优化了异步事件时,它也留给了我们一些需要处理的问题-错误处理

大多数同学好像都是在async函数中使用try catch的方式来处理
然后我在想可不可以让这种错误错误更容易一点,通过返回值来判断请求成功/失败

// api.js
export const getRecordList = (params) => fetch(URL, params, 'POST')
      // 假设后台的返回值res格式为 { code: 200, data: { list: [...], total: 999}, msg: '请求成功'}
      // 请求成功,可以在这里加上请求成功的提示信息,保证return一个true
      .then(res => res.data || {})
      // 请求错误的提示信息,保证return false
      .catch((err) => alert(err));

// RecordList.js
...
async getRecordList() {
    const { isLoading, searchParams } = this.data;
    if (isLoading) return;
    // -- 请求开始 --
    this.data.isLoading = true;
    const res = await API.getRecordList(searchParams);
    // 这里通过res的返回值来判断请求是否成功
    if (res) {
      // 成功的业务逻辑,刷新record列表数据及分页数据
      const { list, total } = res;
      this.data.list = list;
      this.data.totalPage = Math.ceil(total / PAGE_SIZE) || 1;
    } else {
      // 失败的业务逻辑...
    }
    this.data.isLoading = false;
    // -- 请求结束 --
  },
...

我觉得上面这种方式也可以代替try catch方法,而且更清晰。 不知道可行否。。。 求大佬们指点

回复
阅读 1.3k
3 个回答
✓ 已被采纳
你这是逻辑处理 和try catch的代码异常捕获是有区别的
你这样处理就是if else 条件逻辑
!(async function(){
  function test(){
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            Math.random() > 0.5 ? resolve('normal') : reject('error')
        }, 1000)  
    })  
  }
  
  function to(promise){
    return new Promise((resolve, reject) => {
        promise.then(re => resolve([null, re])).catch(err => resolve([err, null]))
    })
  }
  [err, re] = await to(test())
  console.log(err, re)
})()

返回两个参数就好了

李昊天
  • 1.8k

Promise + try catch

 return new Promise((resolve, reject) => {
    try{
        //具体请求代码
        //这里也可以做一些判断 比如你的代码里面的
        //if (res) {
        //resolve(res)
        //}else{
        //reject(res)
        //}
        resolve(res)
    }catch(e){
        reject(e)
    }
})

调用方法的时候带上 .then() .catch()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏