async...await...异常捕捉封装

前言

async...await...简化了Promise的写法,尤其是后者多次嵌套的情况下,代码可读性很差。但前者的异常捕获却没那么方便

async...await...异常捕获

javascript
async function func(val) {
  return new Promise((resolve, reject) => {
    if(val) resolve(val)
    else reject('Invalid value')
  })
}
async function test(val) {
  try {
    const resp = await func(val)
    console.log(resp)
  } catch (err) {
    console.error(err)
  }
}

try...catch...让async...await...的代码既不美观又繁琐

封装异常捕获

common-methods.js

javascript
export async function asyncFuncWrapper(func, ...args) {
  try {
	const resp = await func(...args)
	return { resp }
  } catch (err) {
	return { err }
  }
}

demo.vue

javascript
<script>
import { asyncFuncWrapper } from '@/utils/common-methods'

export default {
  methods: {
	async func(val) {
	  return new Promise((resolve, reject) => {
	    if(val) resolve(val)
	    else reject('Invalid value')
	  })
	}
	async test(val) {
	  const { resp, err } = await asyncFuncWrapper(this.func, val)
	  if(err) {
	  	console.error(err)
	  	return
	  }
	  console.log(resp)
	}
  }
}
</script>

注意: 本文封装了Promise的异常捕捉,就像,try...catch... 一样,异常 err 已经被捕捉了,需自行处理异常。

处理异常时,需考虑到是否有依赖本方法,且也需要捕捉该异常的方法。有则需要手动抛出异常

Last updated: