你如何用回调使函数具有任意数量的参数

How do you make function with any number of arguments with a callback

本文关键字:任意数 参数 函数 何用 回调      更新时间:2023-09-26

例如我有

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
}

如何在节点回调样式中实现这一点?不使用承诺

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);
}

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

我可能会假设第一个参数始终是回调。

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

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

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

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);
}

你试过吗:

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