Node.js - 回调参数

新手上路,请多包涵

我目前正在学习一般的 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.
  }
})

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

它会在运行时检查每个类型吗?谢谢。

原文由 Joshua H 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 281
2 个回答

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

function(response, body) {}

您仍然会收到错误对象和响应——只是在这种情况下,名为“response”的变量将保存错误对象,而名为“body”的变量将保存响应。您将跳过的输入将是您没有提供的第三个输入,即正文。参数的 名称 没有区别,它们在函数签名中的位置决定了它们将被分配的值。

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

原文由 Jeff Kilbride 发布,翻译遵循 CC BY-SA 3.0 许可协议

此功能的可能实现可能是:

 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...
}

原文由 marco 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题