Pass an extra argument to a callback function

2018-12-31 07:32发布

I have a function callWithMagic which takes a callback function as a parameter and calls it with one argument.

const callWithMagic = callback => {
  const magic = getMagic();
  callback(magic);
};

I also have a function processMagic which takes two arguments: magic and theAnswer.

const processMagic = (magic, theAnswer) => {
  someOtherMagic();
};

I want to pass the function processMagic as an argument to callWithMagic, but I also want to pass 42 as the second parameter (theAnswer) to processMagic. How can I do that?

callWithMagic(<what should I put here?>);

4条回答
明月照影归
2楼-- · 2018-12-31 07:40

You could use an anonymus function

something like

session.sub('Hello', function(){marketEvents(your args);});
查看更多
还给你的自由
3楼-- · 2018-12-31 07:41

You can create a function which calls the marketEvent function. No need to complicate things

session.sub('Hello', function(args, kwargs) {
    marketEvent(args, kwargs, 'my custom data');
});

otherwise you can do this:

var mrktEvent = function(customArgs) {
    return function(args, kwargs) { 
        marketEvent(args, kwargs, customArgs) 
    };
}

session.sub('Hello', mrktEvent("customEvent"));
查看更多
无色无味的生活
4楼-- · 2018-12-31 07:56

Just create a wrapper callback:

callWithMagic(function(magic) {
  return processMagic(magic, 42);
});

Or using ECMAScript 6 arrow functions:

callWithMagic(magic => processMagic(magic, 42));
查看更多
流年柔荑漫光年
5楼-- · 2018-12-31 08:04

You can bind argument object to callback function:

var varObject = {var1: "findButton", var2: true};

function cbFunc() {
    console.log(this.var1+ ":" + this.var2);
}

//Example callback
datatable.ajax.reload(cbFunc.bind(varObject));
查看更多
登录 后发表回答