如何编写此方法,以使回调参数有效?

时间:2018-11-15 20:40:51

标签: javascript node.js

这是npm的Twitter软件包中的一种方法。

  T.get('search/tweets', params, function(err, data, response) {
  if(!err){
    // This is where the magic will happen
  } else {
    console.log(err);
  }
})

我知道通常您会用这样的回调编写方法

    T.prototype.get = function(url, options, callback) {
    //code here
    callback();

}

我的问题是如何将“ err”,“ data”和“ response”值传递给回调函数。是通过执行以下操作吗?

callback(error, returnedTweets, reponseObject);

1 个答案:

答案 0 :(得分:2)

是的,参数由回调的调用方发送到回调,在您的示例中,该参数将是T.get()的内部实现。因此,如果您在像这样的function(err, data, response) ...回调中获得了三个参数,那是因为这是使用具有适当类型以匹配该参数的三个参数来调用回调的方式:

T.prototype.get = function(url, options, callback) {
    //code here
    callback(err, data, response);

}

传递的参数在本地命名都没有关系。因此,在T.get()实现的内部,这些参数可能具有不同的名称:

T.prototype.get = function(url, options, callback) {
    //code here
    callback(error, returnedTweets, reponseObject);
}

是传递给回调的那些变量的值。他们在实现中拥有的名称对回调本身毫无意义。


在此代码中声明回调时给它们提供的名称也不相关:

T.get('search/tweets', params, function(err, data, response) {
    // callback implementation here
});

您可以为所需的回调参数选择任何名称。回调参数是按特定顺序传递的,因此无论您在回调声明中命名第一个参数如何,都将具有调用回调时传递的第一个参数的值。 Javascript中的参数是按顺序/位置而不是名称。例如,您可以这样命名它们:

T.get('search/tweets', params, function(arg1, arg2, arg3) {
    // callback implementation here
});

并且,代码仍然可以正常工作,尽管它的可读性要差很多,因为人们只需要知道arg1是错误值,而arg2是数据,依此类推。因此,大多数开发人员会选择有意义的名称来帮助描述该参数中的期望值。但是,您为回调参数选择的名称完全取决于您。