原文: 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
,表示异步操作返回结果是否符合预期来作为一个标准规范。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!