如何通过回调使用任意数量的参数来实现函数

时间:2016-04-22 00:37:35

标签: javascript node.js

例如我有

function passConcatenatedStringBack(){
  var i,concatString;
  for(i=0; i<arguments.length;i++){
    concatString = arguments[i];
  }
  callback(concatString); // this will be error since callback is undefined
}

如何在节点回调样式中实现此功能?不使用承诺

4 个答案:

答案 0 :(得分:3)

function passConcatenatedStringBack(){
  var i,concatString, error;
  var args = Array.prototype.slice.call(arguments); //convert to Array as Kenichi Shibata pointed out
  var callback = args.pop(); //get the callback function and remove it from the arguments.

  for(i=0; i< args.length;i++){
    concatString += args[i];
  }
  callback(error, concatString);
}

只需取最后一个参数并将其用作回调。 您仍应实施验证,以检查用户是否提供了有效的回调。

答案 1 :(得分:1)

我可能会认为第一个参数总是回调。

这样我会检查第一个参数是否为类型函数,如果是,则将其用作回调并使用其余作为函数的参数。

那么你也可以,检查最后一个参数是否是回调。

答案 2 :(得分:1)

常见的方法是检查最后一个参数是否为函数:

function fn() {
  var cb = arguments.pop();

  if (typeof cb !== 'function') {
    throw new Error('No callback provided!');
  }

  // do your stuff and then callback
  cb(null, result);
}

答案 3 :(得分:0)

你有没有尝试过:

function passConcatenatedStringBack(callback){}

passConcatenatedStringBack(function (args1){ // callback stuff });