你如何使用任何数量的参数与callbackfunction

比如我有

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 } 

我如何在节点callback风格中实现这一点? 没有使用承诺

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

只要把最后一个参数作为callback。 您仍然应该执行validation以检查用户是否提供了有效的callback。

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

这样我会检查,如果第一个参数是types的function,如果是,然后使用它作为callback,并使用其余作为参数的函数。

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

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

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