53 votes

Passer un argument supplémentaire à une fonction de rappel

J'ai une fonction callWithMagic qui prend une fonction de rappel en paramètre et l'appelle avec un seul 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 en tant qu'argument pour callWithMagic mais je veux aussi passer 42 comme deuxième paramètre ( theAnswer ) à processMagic . Comment puis-je le faire ?

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

66voto

str Points 2352

Il suffit de créer un callback d'enveloppe :

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

Ou en utilisant ECMAScript 6 fonctions de la flèche :

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

4voto

Dropye Points 144

Vous pourriez utiliser une fonction d'anonymat

quelque chose comme

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

1voto

TryingToImprove Points 1007

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

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

sinon vous pouvez le faire :

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

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

0voto

aecavac Points 680

Vous pouvez lier l'objet argument à la 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));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X