Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
69
rated 0 times [  72] [ 3]  / answers: 1 / hits: 26614  / 15 Years ago, mon, january 4, 2010, 12:00:00

I want to something similar to this:



function AjaxService()
{

this.Remove = function (id, call_back)
{
myWebService.Remove(id, CallBack)
}

function CallBack(res) {
call_back(res);
}
}


so my calling program will be like this:



var xx  = new AjaxService();
xx.Remove(1,success);

function success(res)
{


}


Also if I want to add more parameters to success function how will I achieve it.
Say if I have success function like this:



var xx  = new AjaxService();
//how to call back success function with these parameters
//xx.Remove(1,success(22,33));

function success(res,val1, val2)
{


}


Help will be appreciated.


More From » callback

 Answers
163

Use a closure and a function factory:



function generateSuccess (var1,var2) {
return function (res) {
// use res, var1 and var2 in here
}
}
xx.Remove(1,generateSuccess(val1,val2));


What you're passing here is not the generateSuccess function but the anonymous function returned by generateSuccess that looks like the callback expected by Remove. val1 and val2 are passed into generateSuccess and captured by a closure in the returned anonymous function.



To be more clear, this is what's happening:



function generateSuccess (var1,var2) {
return function (res) {
// use res, var1 and var2 in here
}
}
var success = generateSuccess(val1,val2);
xx.Remove(1,success);


Or if you prefer to do it inline:



xx.Remove(1,(function(var1,var2) {
return function (res) {
// this is your success function
}
})(val1,val2));


not as readable but saves you from naming the factory function. If you're not doing this in a loop then Xinus's solution would also be fine and simpler than my inline version. But be aware that in a loop you need the double closure mechanism to disconnect the variable passed into the callback function from the variable in the current scope.


[#97935] Wednesday, December 30, 2009, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
everett

Total Points: 317
Total Questions: 112
Total Answers: 109

Location: Philippines
Member since Sat, Jul 11, 2020
4 Years ago
;