为什么 Node.js 约定 async callback 第一个参数为 error ?

作者站长头像
站长
· 阅读数 24

个人背景: 一个初学 node 的新人。

在读到阮一峰的入门教程时,看到了这样的讲解。为什么 Node.js 约定 async callback 第一个参数为 error ?

对其中有一段描述产生了疑问,“readFile 函数的第二个参数,就是回调函数,也就是任务的第二段”紧接着阮大又解释“原因是执行分成两段,在这两段之间抛出的错误,程序无法捕捉,只能当作参数,传入第二段。

我的理解: 单从上述的 fs.readFile 操作来讲,两段操作分别为

  1. 等待操作系统返回相对应的数据。
  2. 执行 callback

问题:

  1. 这两段之间的错误是什么意思?
  2. 为什么这两段之间无法捕捉,就得把 err 当成第一个参数了呢?反过来会产生什么问题吗?
回复
1个回答
avatar
test
2024-06-25
  1. 如果你熟悉函数的堆栈逻辑,你会明白,在传统的回调模式里,执行异步操作,和异步之后的回调函数,处于两个栈。所以前一个栈如果发生错误,在后面的栈里无法捕获
  2. 于是只能对异步函数进行捕获,然后通过函数参数的形式,把错误传过来;而无法 try ... catch ... 整段代码
  3. 至于为什么当第一个参数,因为异步函数的返回值个数不定,所以把错误放第一个比较方便将来使用
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容