Cha*_*Liu 6 javascript callback node.js express
我对 Node.js 还很陌生,我正在尝试理解它的错误优先回调风格。
我很好奇函数如何知道第一个参数是否用于处理错误以及何时用于处理请求以及什么不是,因为这些变量名称是任意的。
以下是一些首先包含和不包含 err 的代码示例
fs.readFile('/foo.txt', function(err, data) {
if (err) {
console.log('Ahh! An Error!');
return;
}
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
和
http.createServer(function(req, res) { ... });
Run Code Online (Sandbox Code Playgroud)
我相信 Express 框架通过计算参数数量来实现这一点,将 err 作为可选的第一个参数,但在这些情况下,只有两个参数。
将回调的第一个参数作为错误代码只是 Node.js 在其运行时库中用于所有异步函数回调的约定,现在已经成为 Node.js 世界中所有异步回调的某种标准,甚至在附加中 -在模块上。
您仅“知道”这是由于文档而使用的约定。没有运行时检查是否这是正在使用的约定。
仅供参考,Javascript 中的所有回调都是如此。您只能通过回调的文档知道参数是什么。
请注意,Javascript 中的回调用于不同类型的事物。有些用途需要传达错误状态,有些则不需要。例如,http 请求处理程序是一个回调,但与回调通信时不会出现错误。要么有传入的 http 请求且回调被调用,要么没有传入的 http 请求且不被调用。没有错误状态可以与该类型的回调通信,因此没有错误参数传递给它。
但是,几乎所有表示异步操作完成的回调都可能以错误结束,因此必须将参数传递给err回调,以便回调知道发生了什么以及异步操作是否成功。
回调有两种截然不同的用途。只有需要传达可能的错误状态的回调才会包含err您询问的参数。
例如,事件处理程序回调(发生某些事件时调用的回调 - 例如浏览器中的单击、传入的 http 请求、传入的 webSocket 数据包、计时器事件)通常没有与之关联的错误状态,因此它们不要使用err参数约定。
| 归档时间: |
|
| 查看次数: |
3050 次 |
| 最近记录: |