如何为函数callback添加额外的参数

我正在写一个应用程序中使用一些callback。 我正在使用mongoose模型,需要保存一些不同的地方。 save函数接受一个callback函数,callback函数获取参数的errormodel ,但是我想发送callback函数需要的一个额外的参数。 我不确定能够做到这一点的正确语法。 下面是我要去的一些示例代码…

 var saveCallBack = function(err, model, email_address){ if(err) { //handle error } else { //use the third parameter, email_address, to do something useful } }; 

下面, token是mongoose模型。 正如我所说,保存需要callback,并通过错误和模型,但我也想发送我的callback一个variablesemail_address,我弄清楚在其他点。 appendParameter函数显然是伪代码,但这是我需要的functiontypes。

 token.save(saveCallBack.appendParameter(email_address)); 

如果您改为第一个参数,则可以使用.bind()

 token.save(saveCallBack.bind(null, email_address)); var saveCallBack = function(email_address, err, model){}; 

我正在使用绑定函数来附加callback的附加参数

 var customBind = function (fn, scope, args, appendArgs) { if (arguments.length === 2) { return function () { return fn.apply(scope, arguments); }; } var method = fn, slice = Array.prototype.slice; return function () { var callArgs = args || arguments; if (appendArgs === true) { callArgs = slice.call(arguments, 0); callArgs = callArgs.concat(args); } else if (typeof appendArgs == 'number') { callArgs = slice.call(arguments, 0); } return method.apply(scope || window, callArgs); }; } 

这个customBind函数接受四个参数,第一个是原始的callback函数,第二个是范围,第三个是附加参数(数组),第四个是标志附加或replace。 如果将最后一个参数设置为false,则只能使用该数组中的参数。 并使用这个function,你可以简单地添加新的参数或覆盖现有的

 var callback = customBind(saveCallBack, this, [array_of_additional_params], true) 

通过这种方式,所有的原始参数保持不变,你的参数将被追加到最后。

不pipe你定义了多less个参数,被调用者总是在其进程中传递相同的参数。 但它会更简单,只需使用从callback之外可见的variables即可。 例如:

 var email = 'yourmail@mail.com'; var saveCallBack = function(err, model){ if(err) { //handle error } else { alert(email); } }; 

更新(@Jason):那么你可以使用Immediately-Invoked Function Expression(IIFE)

  (function(mail){ var saveCallBack = function(err, model){ if(err) { //handle error } else { alert(mail); } }; token.save(saveCallBack); }, emailAddress);