Node.js如何知道回调的第一个参数是否是错误处理程序
How does Node.js know if the first parameter of a callback is an error handler?
我对Node.js还很陌生,我正试图了解它的错误优先回调风格。
我很好奇一个函数如何知道第一个参数是否用于处理错误,何时用于处理请求,以及为什么不知道,因为这些变量名是任意的。
以下是一些带有和不带有错误优先的代码示例
fs.readFile('/foo.txt', function(err, data) {
if (err) {
console.log('Ahh! An Error!');
return;
}
console.log(data);
});
和
http.createServer(function(req, res) { ... });
我相信Express框架通过计算参数的数量来实现这一点,将err作为可选的第一个参数,但在这些情况下,只有两个参数。
将回调的第一个参数作为错误代码只是node.js在其运行库中用于所有异步函数回调的约定,现在已经成为node.js世界中所有异步回调的标准,甚至在附加模块中也是如此。
您只"知道"这是一个使用的惯例,因为文档。没有运行时检查这是正在使用的约定。
仅供参考,这适用于Javascript中的所有回调。您只知道回调的文档中有哪些参数。
注意,Javascript中的回调用于不同类型的事情。有些用途需要传达错误状态,有些则不需要。例如,http请求处理程序是一个回调,但与回调通信时没有错误。要么有一个传入的http请求并调用了回调,要么没有,也没有调用。没有错误状态可以与该类型的回调通信,因此没有错误参数传递给它
但是,几乎所有发出异步操作完成信号的回调都可能以错误结束,因此必须将err
参数传递给回调,以便回调知道发生了什么以及异步操作是否成功。
回调有两种截然不同的用途。只有需要传达可能的错误状态的回调才会包括您询问的err
参数。
例如,事件处理程序回调(在某些事件发生时调用的回调,如浏览器中的单击、传入的http请求、传入的webSocket数据包、计时器事件)通常没有与它们相关联的错误状态,因此它们不使用err
参数约定。
这让我更容易了。把编码对象的函数想象成在函数上附加了最后一行类似这样的内容。
if (callback && typeof(callback) === "function") {
callback(param1, param2);
}
在实践中,它将比这更为普遍。但是,一旦你知道了这一点,你就可以找到一种更通用的方法(使用参数数组等)。
当我在寻找同样的东西时,我在评论中得到了这一点。http://www.impressivewebs.com/callback-functions-javascript/
- 测试mongo脚本中是否存在参数
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 检查对象是否是mongo游标
- 是否可以测试javascript函数是否是构造函数
- 检查请求的用户是否是django中的所有者
- 角度 2 :检查路由名称是否是当前名称
- 我怎么知道日期是否是星期六
- 从不断变化的动作创建者那里获取商店数据是否是一种常见的做法
- 在node.js/ssocket.io中,如何判断对象是否是套接字的实例
- 在jQuery中,如何测试一个元素是否是同一类的多个元素中的第一个
- 是否有跨浏览器和跨框架的方法来检查对象是否是HTML元素
- 如何判断页面是否是从fetch()调用的
- Node.js如何知道回调的第一个参数是否是错误处理程序
- 如何检查一个对象是否是“;深空”;
- javascript测试一个值是否是一个数字和一个大于0的数字
- jqueryangularjs如何知道鼠标按下事件是否是由浏览器的滚动条触发的
- 如何检查传递到递归函数的参数是否是数组的元素
- 读取函数'的参数以及它们是否是可选的
- 如何检查对象是否是 JavaScript 中的参数对象