Javascript“err”函数参数 – 它是如何工作的?

我在看Node.js代码示例,使用“if(err){// code //);” 语句来控制它的函数的输出 – 但是当函数被调用时,我看不到任何东西被传递给它们,就好像“err”参数是由隐藏的代码在后台定义的那样。

下面的代码是asynchronous的,并使用SDK中的外部模块,应该注意。

/* "client.sendEvent" sends the data contained within the variable "message" to its destination, when this is complete the callback function "printResultFor" is called and a string is passed to that */ client.sendEvent(message, printResultFor('Message')); //printResultFor looks like this: var printResultFor = function (op) { return function printResult(err, res) { if (err) console.log(op + ' error: ' + err.toString()); if (res) { console.log(op + ' status: ' + res.constructor.name); }; }; } 

我的问题是:

  1. 为什么这个callback函数需要返回一个嵌套函数?

  1. “err”和“res”的值是如何传递给这个嵌套函数的?

我真的怀疑,如果答案在于外部模块,但我不知道…

(最后说明:我是一个带有Javascript和Node的自学新手,我敢打赌,这对大多数人来说都是微不足道的,但是要感谢你的任何解释和帮助。

这被称为错误首先callback ,它不是一个语言function,而是一个约定。

正如Fred K. Schott在Node.js中所说- 了解错误优先callback :

  1. callback的第一个参数是为一个错误对象保留的。 如果发生错误,将由第一个err参数返回。

  2. callback的第二个参数保留给任何成功的响应数据。 如果没有错误发生,err将被设置为null,并且任何成功的数据将在第二个参数中被返回。

基本上它是说,如果有任何错误,你会知道通过检查第一个参数。

这是任何基于callback的nodejs库的预期行为,您应该devise您的接口。

printResultFor被调用,并返回里面定义的函数。 无论调用printResultFor然后调用它现在有权访问的内部函数,因为它被返回。 它只是在代码中发生,你不在寻找它。

例如:

 var printResult = printResultFor(something); printResult(null, dataObjectHere); 

通过这样做, printResult可以通过闭包访问opvariables(因为它是在printResultFor函数中定义的,它可以访问在其中定义的所有variables和参数)。

  1. 它并不一定需要,因为有许多方法来剥皮许多猫,但它正在使用一种function编程模式,被称为“咖喱”。 这里有一个关于这个话题的很好的介绍性文章 ,涉及到javascript
  2. err作为callback中的第一个参数是节点中常见的模式。 当没有错误时,通常是nullres是没有遇到错误时得到的数据。