老生常谈,很多人在面对轻松使用await的同时,又因为它的处理机制而又头疼。
现在博主带来两种异常处理方式:
1: 传统的try{}catch{} //但当代码量复杂的时候就显得不够整洁
2: 推荐使用scopsy贡献的 await-to-js包,可以使用npm直接下载
它的底层很简单,就是对promise进行了一层封装,我们可以把它拿出来放在项目中的基类中进行使用:
//该npm包的源码,利用promise.then和.catch方式返回异常
export default function to(promise) {
return promise.then(data => {
return [null, data];
})
.catch(err => [err]);
}
//代码实例
import to from './to.js';
//如果使用require引入的方式,则可以使用结构赋值的方式
//const { to } = require('await-to-js');
async function asyncTask() {
let err, user, savedTask;
[err, user] = await to(UserModel.findById(1));//如果此异步发生异常,则err生效,否则默认为null
if(!user) throw new CustomerError('No user found');
[err, savedTask] = await to(TaskModel({userId: user.id, name: 'Demo Task'}));
if(err) throw new CustomError('Error occurred while saving task');
if(user.notificationsEnabled) {
const [err] = await to(NotificationService.sendNotification(user.id, 'Task Created'));
if (err) console.error('Just log the error and continue flow');
}
}
//这种方式遵循了回调函数的参数机制,第一个参数为错误参数
参考:原文地址