如何优雅处理 async await 错误——解读小而美的 await-to-js 库

本文介绍了JavaScript异步编程的发展,从回调地狱到Promise再到async/await,并引出了await-to-js库,它提供了一种无需try-catch就能优雅处理async/await错误的方式。通过源码分析,展示了await-to-js如何简化错误处理,以及其基本用法和工作原理。
摘要由CSDN通过智能技术生成

大家好,我是若川。持续组织了5个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。

这是源码共读活动第21期 await-to-js,优雅的处理 async await 的 try-catch,读者掘金@爱嘿嘿的小黑 的投稿。

1前言

学而不思则罔

最近有在读一些比较优秀的npm包的代码,起因是感觉自己现在写的代码还是不够规范,不够简洁。

可是我又不知道到底什么样的代码才算是比较的代码,在进行一番思考过后我认为还是要站在巨人的肩膀上。

通过阅读优秀的源码并从中学习如何写出让人觉得赏心悦目的代码最后再写文进行章总结对整个学习的过程进行一个梳理同时分享给其他人。

为什么要在开头写这么多呢?因为我需要为自己坚持下去找一个理由。这样我才能乘风破浪,一往无前。

话不多说,开始总结。

2JS异步编程进化之路

回调地狱阶段

在正式介绍await-to-js这个库之前,让我们先简单的回顾一下有关于在JavaScript这门语言中,异步编程的进化之路。在Promise没出现之前,异步编程一直是困扰着前端工程师的一个大难题,当时的前辈可能会经常看到下面这种代码。

function AsyncTask() {
   asyncFuncA(function(err, resultA){
      if(err) return cb(err);

      asyncFuncB(function(err, resultB){
         if(err) return cb(err);

          asyncFuncC(function(err, resultC){
               if(err) return cb(err);

               // And so it goes....
          });
      });
   });
}

这种同时在纵向和横向延伸的回调中嵌套着回调的代码又被称为回调地狱。可见这玩意让人多么恶心,具体来说有以下这几个缺点

  • 难以维护(看都不想看,还维护个**)

  • 难以捕捉到错误(一个一个找?) 总而言之,这个问题在当时是很需要被解决的,所以在ES6中,出现了Promise。

Promise阶段

Promise是一种优雅的异步编程解决方案。从语法上来将,它是一个对象, 代表着一个异步操作最终完成或失败,从语意上来讲,它是承诺,承诺过一段时间给你一个结果。

由于它的原型存在then,catch,finally会返回一个新的promise所以可以允许我们链式调用,解决了传统的回调地狱的问题。

由于它本身存在al

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值