如何在1-arg javascript函数中使用2个参数?

时间:2017-02-28 14:11:05

标签: javascript closures nested-function

我正在使用node.js中的http模块从url中读取。 http.get函数有this signature

http.get(options[, callback])

回调函数只接受一个参数res。如果我想在回调中使用额外的对象/函数,我该怎么办?我可以考虑像这样内联get get:

outerFunction = function(xyz) {
  http.get(options, (res) => {
    // do stuff with xyz here
    xyz(res.blah);
  }
});

但是如果我的回调变长了,我想在某个地方预先声明它:

myCallback = function(xyz) {
  return function(r) { xyz(r.blah); };
}

并像这样调用myCallback:

outerFunction = function(xyz) {
  http.get(options, (res) => {
    myCallback(xyz)(res);
  });
}

但这似乎超级笨拙,只能绕过1-arg回调限制。

有更好的方法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

你可以使用这个代码,因为myCallback返回一个函数,然后在获取资源后,http会自动将res传递给xyz。

outerFunction = function(xyz) {
   http.get(options,myCallback(xyz));
}

答案 1 :(得分:0)

您可以使用arguments对象。

  

arguments对象是一个可用的局部变量   功能。您可以在函数中引用函数的参数   通过使用arguments对象。该对象包含每个条目   传递给函数的参数,第一个条目的索引从   0

快速举例:

function test1234(a){
    var args = arguments;
    console.log(args); // prints -> 0: "a", 1: "b"
}

test1234('a', 'b');