如何为函数callback添加额外的参数
我正在写一个应用程序中使用一些callback。 我正在使用mongoose模型,需要保存一些不同的地方。 save函数接受一个callback函数,callback函数获取参数的error
和model
,但是我想发送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);