Node系列-callback的首个参数为什么是error?

原文: nodejs.org/en/knowledg…

对于Node.js来说,异步函数很重要的一个理念就是callback回调函数来处理异步操作的返回结果。

写过一些Node的相关同学一开始可能会好奇为什么回调函数callback的第一个参数总是error呢?

在Node.js中,这种实现被认为是一种处理异步操作的错误的标准操作。如果errro参数是一个Error对象,我们认为异步操作发生的错误; 反之如果正确,则为null

光说不练假把式,下面是一个demo:

var isTrue = function(value, callback) {
  if (value === true) {
    callback(null, "Value was true.");
  }
  else {
    callback(new Error("Value is not true!"));
  }
}

var callback = function (error, retval) {
  if (error) {
    console.log(error);
    return;
  }
  console.log(retval);
}

// Note: when calling the same asynchronous function twice like this, you are in a race condition.
// You have no way of knowing for certain which callback will be called first when calling the functions in this manner.

isTrue(false, callback);
isTrue(true, callback);
复制代码

运行结果:

{ stack: [Getter/Setter],
  arguments: undefined,
  type: undefined,
  message: 'Value is not true!' }
Value was true.
复制代码

从上面的例子可以看出,如果没有发生错误的时候,回调函数的第一个参数就是null。然而如果存在错误,第一个参数就是一个Error对象(此时只需要传入一个参数即可)。

从上面的例子其实可以看出为什么error需要作为回调函数的第一个参数,这里在简单总结一下:

通过将error参数作为回调函数的第一个参数,可以让开发者很容易判断是否出现的错误,从而及时截断,不再继续执行其他操作。

另外一个角度来看:

如果回调函数的第一个参数不是error,那开发者应该怎么样去判断异步操作的结果是否符合预期呢?答案只有一个:只能去判断回调函数的唯一参数【异步操作的返回结果】是否符合你的预期,如果不符合预期,执行对应操作;反之,执行符合预期的操作。

显然,这种方式对于开发者不太友好,也不太方便。

因此Node.js把回调函数的第一个参数作为error,表示异步操作返回结果是否符合预期来作为一个标准规范。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享