Node.js - 回调参数

时间:2016-01-03 18:29:51

标签: javascript node.js callback

我目前正在学习Node和JavaScript中的回调,我对此感到困惑:

var request = require('request');

request('http://www.google.com', function (error, response, body) {
 if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage. 
  }
})

我的问题是:请求函数如何知道回调中每个参数/参数是什么?因为我可以用两个参数有效地调用函数回调并跳过错误?该函数如何知道传递的第一个参数是响应而不是错误,例如?

是否在运行时检查每种类型?感谢。

4 个答案:

答案 0 :(得分:4)

编写请求API的程序员决定发送给回调的参数的顺序。在运行时没有类型检查。如果您在回调签名中只提供两个参数,例如

function(response, body) {}

你仍然会收到错误对象和响应 - 只有在这种情况下,变量名为" response"将保存错误对象,以及名为" body"的变量会举行回应。你要跳过的输入将是你没有提供的第三个,即身体。参数的名称没有区别,它们在函数签名中的位置决定了它们的分配值。

按照惯例,在javascript回调中,回调的第一个参数通常表示错误对象。 总是以这种方式编写,但这是最佳实践。

答案 1 :(得分:3)

这个功能的Possibile实现可能是:

function request (url, callback) {
  // doing something

  callback (error, response, body);
}

该函数将设置errorresponsebody参数的值。我不知道它是如何实现的,但假设您传递了url的数字。可能的实施可能是:

function request (url, callback) {
  if (typeof url === 'number') {
    // Suppose that error is an instance of Error
    callback (new Error ('Url must be a string'), null, null);
  }
  // other stuff...
}

答案 2 :(得分:1)

当你调用List <string> testList = new List <string> (); testList.Add ("pens"); aList.Add (testList); 函数并提供函数作为参数时,它会在内部(模块内部)调用该函数并将其自己的数据作为参数传入(然后使用它)做各种事情)。它传入的数据是它自己生成的数据,它不是您正在创建的数据。

这是回调

我前面回答的一个问题是,为什么这些模块的结构更加深入,请参阅:npm's guidelines on callback errors

答案 3 :(得分:0)

您正在使用特定模块我的朋友和回调在这种情况下直接从它控制。

“请求”模块的回调如何工作是研究的问题。检查他们的文档。