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');
    }
}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值