async..await不使用try..catch

在使用 async..await 的时候,通常需要一堆的 try..catch,虽然摆脱了回调地狱以及 then 嵌套的噩梦,但是又引入了新的问题,过多的 try..catch 破坏了代码结构...

为了解决这个问题,我参考了网上一个比较不错的解决方案:

export default function to(promise) {
  return promise
    .then(data => {
      return [null, data];
    })
    .catch(err => [err]);
}

在使用的时候,只需要判断数组的第一项即可,比如:

async getCode() {
  let [err, code] = await to(
    fetch('https://test.com/api/code')
  )
  if (err) {
    alert(err)
    return
  }
  Toast.showText('获取验证码成功:' + code, {duration: 1000})
}

我们看看在使用这种方法之前的写法:

async getCode() {
  try {
    let code = await fetch('https://test.com/api/code')
    Toast.showText('获取验证码成功:' + code, {duration: 1000})
  } catch (err) {
    alert(err)
    return
  }
}

的确,简洁很多!

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress