Nodejs await异常处理

老生常谈,很多人在面对轻松使用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');
    }
}

//这种方式遵循了回调函数的参数机制,第一个参数为错误参数
参考:原文地址

你可能感兴趣的:(mongoose,node,promise异步控制,await异常处理,promise处理异常,await-to-js,await优雅处理异常)