web-dev-qa-db-fra.com

Passer un argument supplémentaire à une fonction de rappel

J'ai une fonction callWithMagic qui prend une fonction de rappel en tant que paramètre et l'appelle avec un argument.

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

J'ai aussi une fonction processMagic qui prend deux arguments: magic et theAnswer.

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

Je veux passer la fonction processMagic comme argument à callWithMagic, mais je veux aussi passer 42 comme second paramètre (theAnswer) à processMagic. Comment puis je faire ça?

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

Il suffit de créer un rappel de wrapper:

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

Ou en utilisant ECMAScript 6 fonctions de flèche :

callWithMagic(magic => processMagic(magic, 42));
43
str

Vous pouvez utiliser une fonction anonyme

quelque chose comme

session.sub('Hello', function(){marketEvents(your args);});
3
Dropye

Vous pouvez lier un objet argument à une fonction de rappel:

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

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

//Example callback
datatable.ajax.reload(cbFunc.bind(varObject));
1
aecavac

Vous pouvez créer une fonction qui appelle la fonction marketEvent. Pas besoin de compliquer les choses

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

sinon vous pouvez faire ceci:

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

session.sub('Hello', mrktEvent("customEvent"));
1
TryingToImprove