Passer un argument supplémentaire à une fonction de rappel

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

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

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

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

J'ai envie de passer à la fonction processMagic comme un argument de callWithMagic, mais je veux aussi passer 42 comme deuxième paramètre (theAnswer) de processMagic. Comment puis-je le faire?

callWithMagic(<what should I put here?>);
28
demandé sur Michał Perłakowski 2016-11-25 12:53:02

4 réponses

Créez simplement un rappel wrapper:

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

Ou en utilisant ECMAScript 6 Flèche fonctions :

callWithMagic(magic => processMagic(magic, 42));
32
répondu str 2016-11-25 16:31:05

Vous pouvez utiliser une fonction anonymus

Quelque Chose comme

session.sub('Hello', function(){marketEvents(your args);});
1
répondu Dropye 2016-11-25 09:56:17

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
répondu TryingToImprove 2016-11-25 09:59:12

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));
0
répondu aecavac 2018-05-25 08:25:15