2016-11-25 7 views
25

Ich habe eine Funktion callWithMagic, die eine Callback-Funktion als Parameter nimmt und es mit einem Argument aufruft.Übergeben Sie ein zusätzliches Argument an eine Callback-Funktion

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

Ich habe auch eine Funktion processMagic, die zwei Argumente nimmt: magic und theAnswer.

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

Ich will die Funktion processMagic als Argument an callWithMagic passieren, aber ich mag auch 42 als zweiten Parameter (theAnswer) zu processMagic passieren. Wie kann ich das machen?

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

Wenn Sie eine sehr ausführliche Antwort sehen möchten, sehen diese Frage und Antwort, die zwei Jahre älter ist: http: // stackoverflow.com/questions/21985201/pass-extra-parameters-to-jquery-ajax-promise-callback – JotaBe

Antwort

28

Erstellen Sie einfach einen Wrapper Rückruf:

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

Oder mit ECMAScript :

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

Danke, das ist "Arbeit"! Aber nur das erste Mal, dass es marketEvent heißt. Die nächsten Aufrufe werden für den neuenArg-Wert undefiniert zurückgegeben, nicht jedoch für die anderen beiden. – Kulin

+0

@Kulin Dies sollte jedes Mal funktionieren. Hast du es zum Laufen gebracht, als du dies als Antwort markiert hast? – str

+0

Dieser Beitrag wird auf Meta - http://meta.stackoverflow.com/q/338481 (siehe die Kommentare zu der Frage) diskutiert. Informieren Sie auch den Fragesteller, @Kulin. – duplode

1

Sie könnten eine anonymus Funktion

so etwas wie

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

Dies ist bei weitem die beste Antwort, danke! Könnte auch mit Argument (en) für Funktion() verwendet werden, z. session_ (Hallo, Funktion (orgArg)) {marketEvents (orgArg, your_args);}); – gregko

1

Sie können eine Funktion erstellen, die die Funktion marketEvent aufruft. Keine Notwendigkeit, die Dinge zu komplizieren

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

sonst können Sie dies tun:

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

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