12 | 程序中的错误处理:异步编程以及我的最佳实践
陈皓
该思维导图由 AI 生成,仅供参考
你好,我是陈皓,网名左耳朵耗子。
上节课中,我们讨论了错误返回码和异常捕捉,以及在不同情况下该如何选择和使用。这节课会接着讲两个有趣的话题:异步编程世界里的错误处理方法,以及我在实战中总结出来的错误处理最佳实践。
异步编程世界里的错误处理
在异步编程的世界里,因为被调用的函数是被放到了另外一个线程里运行,这将导致:
无法使用返回码。因为函数在“被”异步运行中,所谓的返回只是把处理权交给下一条指令,而不是把函数运行完的结果返回。所以,函数返回的语义完全变了,返回码也没有用了。
无法使用抛异常的方式。因为除了上述的函数立马返回的原因之外,抛出的异常也在另外一个线程中,不同线程中的栈是完全不一样的,所以主线程的 catch 完全看不到另外一个线程中的异常。
对此,在异步编程的世界里,我们也会有好几种处理错误的方法,最常用的就是 callback 方式。在做异步请求的时候,注册几个 OnSuccess()、 OnFailure() 这样的函数,让在另一个线程中运行的异步代码回调过来。
JavaScript 异步编程的错误处理
比如,下面这个 JavaScript 示例:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
异步编程中的错误处理是一个重要的话题,本文从JavaScript和Java两个角度探讨了异步编程中的错误处理方法。在异步编程中,无法使用传统的返回码和异常捕捉方式,因此需要采用其他方法来处理错误。文章首先介绍了JavaScript中的错误处理方式,包括使用回调函数、Promise模式以及ECMAScript 2017标准中的async/await关键字。通过示例代码,展示了这些方法的使用和优势。接着,文章转向Java中的异步编程,介绍了CompletableFuture类的使用,包括链式处理、合并异步函数结果以及异常处理。通过对比JavaScript和Java的异步编程错误处理方法,读者可以全面了解在不同语言环境下的最佳实践。文章还提到了函数式编程中的pipeline方法以及在ECMAScript 2017中的async/await语法糖,为读者提供了更多的思路和选择。总之,本文通过深入浅出的方式,全面介绍了异步编程中的错误处理方法,对于正在学习或使用异步编程的开发者具有很高的参考价值。此外,文章还总结了一些错误处理的最佳实践,包括统一分类的错误字典、定义错误的严重程度、错误日志的输出最好使用错误码等,为读者提供了一些实用的建议。文章还介绍了Go语言中的Promise模式的实现方式,并提供了一些错误处理的最佳实践,为读者提供了更多的思路和选择。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》,新⼈⾸单¥98
《左耳听风》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(53)
- 最新
- 精选
- 云学语言大神,能否总结下您接触的各种语言的特色和缺陷,比如该语言的最佳适用场景,吐槽下该语言不好的地方,比如c++的RAII,javascript的promise就是他们的特色
作者回复: 吐槽,可以啊。过两天写一篇
2018-01-135 - 杜小琨向上尽可能地返回原始的错误。如果一定要把错误返回到更高层去处理,那么,应该返回原始的错误,而不是重新发明一个错误。 这一条如果要作为通用规则我觉得略有争议。我的观点是错误(异常)同样要考虑封装性。 需要考虑到这个错误原因是否应该上层感知。比如在在存储一张图片时,上层进行抽象业务逻辑的单元并不期望知道底层具体存储方式的存在,你用本地磁盘也好,hdfs也罢,这些原始错误暴露到业务流程中反而会让业务茫然不知所措。其实上层业务只需要知道错误发生(图片保存失败)即可,并不关心具体错误的原因。2017-12-159104
- 何小事儿老师,如何解决技术团队因需求不断,业务开发繁忙而导致的技术水平没有显著提高机会的问题?2017-11-13428
- 起司猫很喜欢这种方式去分析问题,我都是单从java的角度去看待对于一个问题的处理。耗子叔的文章都是从不同语言的处理方式,然后得出一个稍微通用的解决,或者给出不同处理方式的优劣。看来有时间的确应该多学几门不同的语言,看问题的视野完全不一样啊☺️☺️为了看懂go的代码,我还特地去简单看了下go的语法。貌似耗子叔很喜欢go(⊙o⊙)哇哈哈哈2017-11-1227
- 像喜欢春天的熊一样喜欢你错误处理方式 1、统一分类的错误字典 2、同类错误的定义最好是可以扩展的 3、定义错误的严重程度。 4、错误日志的输出最好使用错误码,而不是错误信息 5、处理错误时,总是要清理已分配的资源 6、向上尽可能地返回原始的错误 7、忽略错误最好有日志 8、对于同一个地方不停的报错,最好不要都打到日志里 9、不要用错误处理逻辑来处理业务逻辑 10、对于同类的错误处理,用一样的模式 11、尽可能在错误发生的地方处理错误 12、向上尽可能地返回原始的错误 13、处理错误时,总是要清理已分配的资源 14、不推荐在循环体里处理错误 15、不要把大量的代码都放在一个 try 语句块内 16、为你的错误定义提供清楚的文档以及每种错误的代码示例 17、对于异步的方式,推荐使用 Promise 模式处理错误 18、对于分布式的系统,推荐使用 APM 相关的软件2020-04-27115
- 莫名的冲动耗子叔,挺喜欢你的文章,篇篇都是经验之谈,而且面向的受众技术人员也是最广的,既不是那种网上一搜就能找到的技术罗列,也不是普通技术人员平常都难遇到的高深技术问题解析,角度和深度都刚刚好!赞!2017-11-1012
- 左耳朵@ 何小事儿 后面的《时间管理》会有一些,敬请关注2017-11-2110
- aiueo一个强大的系统,一定要有一套日志规范和处理错误机制。2019-12-206
- 陈威严BUG:左右滑动代码块时,文章有时会退出详情页,进到文章列表页2019-02-026
- 爱学习的大叔我们用的splunk和newrelic来监控,然后记录完整错误日志,再借助于splunk很方便2020-01-264
收起评论