作家
登录

从不用try-catch实现的async/await语法来说说错误处理

作者: 来源: 2017-11-02 16:50:09 阅读 我要评论

  •     if (err) return cb("Error occurred while saving task"); 
  •  
  •     if (user.notificationsEnabled) { 
  •         const [err] = await to(NotificationService.sendNotification(user.id, "Task Created")); 
  •         if (err) return cb("Error while sending notification"); 
  •     } 
  •  
  •     cb(null, savedTask); 
  •  
  • Dima 的办法让人产生的了熟悉的感到,Node 的回调中不是经常都如许写吗?

    所以这个办法真的很有意思。不过回过火来想一想,这段代码中每当碰到缺点,都是将缺点消息经由过程 cb() 调用推出去,同时中断后续过程。像这种中断式的缺点处理,其拭魅正合适采取 try-catch。

    我没有批驳 Dima 的缺点处理方法,这个缺点处理方法很好,很相符 Node 缺点处理的风格,也必定会受到很多人的爱好。因为 Dima 的缺点处理方法给带灵感,同时也让我再次核阅了一向比较爱好的 try-catch 方法。

    应用 try-catch 改写膳绫擎的代码

    要用 try-catch 改写膳绫擎的代码,起重要去掉落 to() 封装。如许,一旦产生缺点,须要应用 Promise.prototype.catch() 进行捕获,或者应用 try-catch 对 await promise 语句进行捕获。捕获到的,当然是每个营业代率攀里 reject 出来的 err。

    然而留意,膳绫擎的代码中并没有直接应用 err,而是应用了自定义的缺点消息。所以须要对 reject 出来的 err 进一步处理成指定的缺点消息。当然这难不到谁,比如

    1. someAsync().catch(err => Project.reject("specified message")); 

    然后再最外层加上 try-catch 就好。所以改写之后的代码是:

    1. async function asyncTask(cb) { 
    2.     try { 
    3.         const user = await UserModel.findById(1) 
    4.             .catch(err => Promise.reject("No user found")); 
    5.  
    6.         const savedTask = await TaskModel({ userId: user.id, name"Demo Task" }) 
    7.             .catch(err => Promise.reject("Error occurred while saving task")); 
    8.  
    9.         if (user.notificationsEnabled) { 
    10.             await NotificationService.sendNotification(user.id, "Task Created"
    11.                 .catch(err => Promise.reject("Error while sending notification")); 
    12.         } 
    13.  
    14.         cb(null, savedTask); 
    15.     } catch (err) { 
    16.         cb(err); 
    17.     } 

        推荐阅读

        代码重构的那些坑和实战经验

      2016年冬,我在一家创虻公司的小团队里搞软件开辟。彼时我们有一位真实的企业客户,且软件的第一版也已宣布。开辟按进度落成,在宣布时我欣喜若狂,也异常骄傲,看着体系办事于天天几百万>>>详细阅读


      本文标题:从不用try-catch实现的async/await语法来说说错误处理

      地址:http://www.17bianji.com/lsqh/38423.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)