作家
登录

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

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

  •  
  • 膳绫擎这段代码,大年夜代码量上来说,并没有比 Dima 的代码削减了若干工作量,只是去掉落了大年夜量 if (err) {} 构造。不习惯应用 try-catch 的法度榜样员找找不到中断点,但习惯了 try-catch 的法度榜样员都知道,营业过程一一旦产生缺点(异步代率攀里指 reject),代码就会跳到 catch 块去处理 reject 出来的值。

    1. if (err) return cb(err); 

    而用 try-catch 的模式,就简零丁了

    1. async function asyncTask(cb) { 
    2.     try { 
    3.         const user = await UserModel.findById(1); 
    4.         const savedTask = await TaskModel({ userId: user.id, name"Demo Task" }); 
    5.  
    6.         if (user.notificationsEnabled) { 
    7.             await NotificationService.sendNotification(user.id, "Task Created"); 
    8.         } 
    9.  
    10.         cb(null, savedTask); 
    11.     } catch (err) { 
    12.         cb(err); 
    13.     } 
    14.  

    持续改进

    用函数表达式改良 try-catch 逻辑

    当然还有改进的空间,比如 try {} 块中的代码比较长,会造成浏览不太便利,try-catch 的逻辑有被“割断”的感到。这种情况下可以应用函数表达式来改良

    1. async function asyncTask(cb) { 
    2.     async function process() { 
    3.         const user = await UserModel.findById(1); 
    4.         const savedTask = await TaskModel({ userId: user.id, name"Demo Task" }); 
    5.  
    6.         if (user.notificationsEnabled) { 
    7.             await NotificationService.sendNotification(user.id, "Task Created"); 
    8.         } 
    9.         return savedTask; 
    10.     } 
    11.  
    12.     try { 
    13.         cb(null, await process()); 
    14.     } catch (err) { 
    15.         cb(err); 
    16.     } 
    17.  

    如不雅对缺点的处理代码比较长,也可以写成零丁的函数表达式。

    如不雅过程中每一步的缺点处理逻辑不合怎么办

    如不雅产生缺点,不再转换为缺点消息,而是特定的缺点处理逻辑,怎么办?

    思虑一下,我们用字符串来表示缺点消息,今后可以经由过程 console.log() 来处理处理。而逻辑,最合适的表示当然是函数表达式,最终可以经由过程调用来进行同一处理


      推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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