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

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

在读到阮一峰的入门教程时,看到了这样的讲解。
image.png

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

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

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

问题:

  1. 这两段之间的错误是什么意思?
  2. 为什么这两段之间无法捕捉,就得把 err 当成第一个参数了呢?反过来会产生什么问题吗?
阅读 1k
1 个回答
  1. 如果你熟悉函数的堆栈逻辑,你会明白,在传统的回调模式里,执行异步操作,和异步之后的回调函数,处于两个栈。所以前一个栈如果发生错误,在后面的栈里无法捕获
  2. 于是只能对异步函数进行捕获,然后通过函数参数的形式,把错误传过来;而无法 try ... catch ... 整段代码
  3. 至于为什么当第一个参数,因为异步函数的返回值个数不定,所以把错误放第一个比较方便将来使用
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题