作家
登录

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

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

  •  
  •     try { 
  •         cb(null, await process()); 
  •     } catch (func) { 
  •         cb(func()); 
  •     } 
  •  

  • 然则,一般营业代码 reject 出来的信息平日都是有效的。假如膳绫擎的每个营业 reject 出来的 err 本身就是缺点消息,那么,用 Dima 的模式,仍然须要写

    大年夜不消try-catch实现的async/await语法说缺点处理

    1. (err, data) => { 
    2.     if (err) { 
    3.         // deal with error 
    4.     } else { 
    5.         // deal with data 
    6.     } 
    7.  

    前不久看到 Dima Grossman 写的 How to write async await without try-catch blocks in Javascript。看到标题标时刻,我认为异常好奇。我知道固然在异步法度榜样中可以不应用 try-catch 合营 async/await 来处理缺点,然则处理方法并不克不及与 async/await 合营得很好,所以很想知道到底有什么办法会比 try-catch 更好用。

    Dima 去除 try-catch 的办法

    当然套路依旧,Dima 讲到了回调地狱,Promise 链并最终引出了 async/await。而在处理缺点的时刻,他并不爱好 try-catch 的方法,所以写了一个 to(promise) 来对 Promise 进行封装,辅音解构语法,实现了同步写法但类似 Node 缺点标准的代码。摘抄代码如下

    1. // to.js 
    2. export default function to(promise) { 
    3.     return promise 
    4.         .then(data => { 
    5.             return [null, data]; 
    6.         }) 
    7.         .catch(err => [err]); 
    8.  

    应用示例:

    1. import to from "./to.js"
    2.  
    3. async function asyncTask(cb) { 
    4.     let err, user, savedTask; 
    5.  
    6.     [err, user] = await to(UserModel.findById(1)); 
    7.     if (!userreturn cb("No user found"); 
    8.  
    9.     [err, savedTask] = await to(TaskModel({ userId: user.id, name"Demo Task" })); 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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