左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
175859 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

12 | 程序中的错误处理:异步编程以及我的最佳实践

你好,我是陈皓,网名左耳朵耗子。
上节课中,我们讨论了错误返回码和异常捕捉,以及在不同情况下该如何选择和使用。这节课会接着讲两个有趣的话题:异步编程世界里的错误处理方法,以及我在实战中总结出来的错误处理最佳实践。

异步编程世界里的错误处理

在异步编程的世界里,因为被调用的函数是被放到了另外一个线程里运行,这将导致:
无法使用返回码。因为函数在“被”异步运行中,所谓的返回只是把处理权交给下一条指令,而不是把函数运行完的结果返回。所以,函数返回的语义完全变了,返回码也没有用了
无法使用抛异常的方式。因为除了上述的函数立马返回的原因之外,抛出的异常也在另外一个线程中,不同线程中的栈是完全不一样的,所以主线程的 catch 完全看不到另外一个线程中的异常。
对此,在异步编程的世界里,我们也会有好几种处理错误的方法,最常用的就是 callback 方式。在做异步请求的时候,注册几个 OnSuccess()OnFailure() 这样的函数,让在另一个线程中运行的异步代码回调过来。

JavaScript 异步编程的错误处理

比如,下面这个 JavaScript 示例:
function successCallback(result) {
console.log("It succeeded with " + result);
}
function failureCallback(error) {
console.log("It failed with " + error);
}
doSomething(successCallback, failureCallback);
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(53)

  • 最新
  • 精选
  • 云学
    语言大神,能否总结下您接触的各种语言的特色和缺陷,比如该语言的最佳适用场景,吐槽下该语言不好的地方,比如c++的RAII,javascript的promise就是他们的特色

    作者回复: 吐槽,可以啊。过两天写一篇

    5
  • 杜小琨
    向上尽可能地返回原始的错误。如果一定要把错误返回到更高层去处理,那么,应该返回原始的错误,而不是重新发明一个错误。 这一条如果要作为通用规则我觉得略有争议。我的观点是错误(异常)同样要考虑封装性。 需要考虑到这个错误原因是否应该上层感知。比如在在存储一张图片时,上层进行抽象业务逻辑的单元并不期望知道底层具体存储方式的存在,你用本地磁盘也好,hdfs也罢,这些原始错误暴露到业务流程中反而会让业务茫然不知所措。其实上层业务只需要知道错误发生(图片保存失败)即可,并不关心具体错误的原因。
    8
    103
  • 何小事儿
    老师,如何解决技术团队因需求不断,业务开发繁忙而导致的技术水平没有显著提高机会的问题?
    4
    28
  • 起司猫
    很喜欢这种方式去分析问题,我都是单从java的角度去看待对于一个问题的处理。耗子叔的文章都是从不同语言的处理方式,然后得出一个稍微通用的解决,或者给出不同处理方式的优劣。看来有时间的确应该多学几门不同的语言,看问题的视野完全不一样啊☺️☺️为了看懂go的代码,我还特地去简单看了下go的语法。貌似耗子叔很喜欢go(⊙o⊙)哇哈哈哈
    26
  • 像喜欢春天的熊一样喜欢你
    错误处理方式 1、统一分类的错误字典 2、同类错误的定义最好是可以扩展的 3、定义错误的严重程度。 4、错误日志的输出最好使用错误码,而不是错误信息 5、处理错误时,总是要清理已分配的资源 6、向上尽可能地返回原始的错误 7、忽略错误最好有日志 8、对于同一个地方不停的报错,最好不要都打到日志里 9、不要用错误处理逻辑来处理业务逻辑 10、对于同类的错误处理,用一样的模式 11、尽可能在错误发生的地方处理错误 12、向上尽可能地返回原始的错误 13、处理错误时,总是要清理已分配的资源 14、不推荐在循环体里处理错误 15、不要把大量的代码都放在一个 try 语句块内 16、为你的错误定义提供清楚的文档以及每种错误的代码示例 17、对于异步的方式,推荐使用 Promise 模式处理错误 18、对于分布式的系统,推荐使用 APM 相关的软件
    1
    15
  • 莫名的冲动
    耗子叔,挺喜欢你的文章,篇篇都是经验之谈,而且面向的受众技术人员也是最广的,既不是那种网上一搜就能找到的技术罗列,也不是普通技术人员平常都难遇到的高深技术问题解析,角度和深度都刚刚好!赞!
    11
  • 左耳朵
    @ 何小事儿 后面的《时间管理》会有一些,敬请关注
    10
  • 陈威严
    BUG:左右滑动代码块时,文章有时会退出详情页,进到文章列表页
    6
  • aiueo
    一个强大的系统,一定要有一套日志规范和处理错误机制。
    5
  • 爱学习的大叔
    我们用的splunk和newrelic来监控,然后记录完整错误日志,再借助于splunk很方便
    4
收起评论
显示
设置
留言
53
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部