Node.js如何知道callback的第一个参数是一个error handling程序?

我对Node.js很陌生,我试图围绕它的错误优先的callback风格。

我很好奇一个函数如何知道第一个参数是否用于处理错误,什么时候用于处理请求,什么不是,因为这些variables名是任意的。

这里有一些例子,首先有没有err的代码

fs.readFile('/foo.txt', function(err, data) { if (err) { console.log('Ahh! An Error!'); return; } console.log(data); }); 

 http.createServer(function(req, res) { ... }); 

我相信Express框架通过计算参数的数量来做到这一点,但是在这些情况下,只有两个参数。

具有callback的第一个参数是错误代码只是node.js在其运行时库中为所有asynchronous函数callback使用的约定,现在已成为node.js世界中的一种标准,适用于所有asynchronouscallback,在模块上。

你只是“知道”这是因为文档而被使用的惯例。 没有运行时检查这是使用的惯例。

仅供参考,Javascript中的所有callback都是如此。 你只知道什么参数是callback的文档。


请注意,Javascript中的callback用于不同types的东西。 有些使用需要传达错误状态,有些则不需要。 例如,一个http请求处理程序是一个callback函数,但是没有任何错误传递给callback函数。 要么有一个传入的http请求,callback被称为或没有和它不被调用。 没有错误状态与该types的callback进行通信,因此没有传递给它的错误参数。

但是,几乎所有表示完成asynchronous操作的callback都可能以错误结束,因此必须将errparameter passing给callback函数,以便callback知道发生了什么以及asynchronous操作是否成功。

callback有两个非常不同的用途。 只有需要传递可能的错误状态的callback才会包含您询问的err参数。

例如,事件处理程序callback(发生某些事件时调用的callback – 如浏览器中的单击,传入的http请求,传入的webSocket数据包,计时器事件)通常不会有与之相关的错误状态,因此它们不要使用err参数约定。

这使我更容易一点。 想象一下把这些对象编码成最后一行的function。

 if (callback && typeof(callback) === "function") { callback(param1, param2); } 

这实际上比这更一般。 但是,一旦你知道它在那里,你可以使用更通用的方法(使用参数数组等)。

当我正在寻找同样的东西的时候,我在这里得到了这个意见。 http://www.impressivewebs.com/callback-functions-javascript/