Javascript 是不是;错误第一次回调";是否需要一个双参数函数来处理回调?

Javascript 是不是;错误第一次回调";是否需要一个双参数函数来处理回调?,javascript,node.js,callback,Javascript,Node.js,Callback,在编写节点应用程序时,我被要求使用该模式 该模式指示回调的第一个参数是错误函数,第二个参数是响应数据,如对fs.readFile函数的回调所示: fs.readFile('/foo.txt', function(err, data) { // TODO: Error Handling Still Needed! console.log(data); }); 但是,文本本身并没有说明任何关于接受回调的函数的内容——这里是readFile 是否有关于此类功能的最佳实践?例如,有人告诉我,它

在编写节点应用程序时,我被要求使用该模式

该模式指示回调的第一个参数是错误函数,第二个参数是响应数据,如对fs.readFile函数的回调所示:

fs.readFile('/foo.txt', function(err, data) {
  // TODO: Error Handling Still Needed!
  console.log(data);
});
但是,文本本身并没有说明任何关于接受回调的函数的内容——这里是readFile


是否有关于此类功能的最佳实践?例如,有人告诉我,它应该只接受两个参数,第二个是回调,就像上面的例子一样。是这样吗?或者可以接受任何数量的参数吗?回调应该是最后一次吗?如果存在这种最佳实践,原因是什么?

错误优先回调模式只要求函数接受2个参数,第一个是错误。你做得对

err
不是一个函数。这是一个包含错误信息的对象。但是我可以是
null
(如果您没有错误)

您可以这样处理它:

if(err) {
  console.log('Error !', err);
  return;
}

对您的问题稍加更正-->回调的第一个参数是错误对象,而不是您提到的错误函数。假设是打字错误

关于使用回调的函数,我知道没有标准的实践,但对我来说,将回调设置为最后一个是有意义的。我个人觉得它更具可读性。在我看来,回调是稍后(或最后)调用的,因此回调是最后一个参数。事实上,如果您看到expressjs框架,即定义路由处理函数的方式,那么回调将按照它们定义的顺序调用

例如:app.get('someurl',cbfn1,cbfn2,…cbfnN)
在上面,回调的调用顺序为cbfn1、cbfn2。。。到cbfnN(假设所有处理程序都调用next())。

我讨厌“最佳实践”这个短语,因为通常你要处理的是你的应用程序使用的设计原则。我假设该模式只引用回调,并且接受回调的函数可以根据需要拥有尽可能多的参数,只要回调是最后一个并遵循该模式;函数应该根据需要使用尽可能多的参数。