2016-11-25 141 views
25

我有一個函數callWithMagic它將一個回調函數作爲參數並用一個參數調用它。將一個額外的參數傳遞給回調函數

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

我也有一個功能processMagic這需要兩個參數:magictheAnswer

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

我想傳遞函數processMagic作爲參數傳遞給callWithMagic,但我也想通過42作爲第二個參數(theAnswer)至processMagic。我怎樣才能做到這一點?

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

如果你想看到一個更完整的答案,看到這個問題和答案,這是兩歲的:HTTP:// stackoverflow.com/questions/21985201/pass-extra-parameters-to-jquery-ajax-promise-callback – JotaBe

回答

28

只需創建一個包裝回調:

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

或者使用ECMAScript :

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

謝謝,這是'工作'!但只有第一次那個叫做marketEvent的。下一次調用返回未定義的newArg值,但不是其他兩個。 – Kulin

+0

@Kulin這應該每次都有效。你是否將它標記爲答案? – str

+0

這篇文章正在Meta上討論 - http://meta.stackoverflow.com/q/338481(請參閱問題的評論)。還通知提問者@Kulin。 – duplode

1

你可以使用一個anonymus功能

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

這是迄今爲止最好的答案,謝謝!也可以用於function()的參數,例如session.sub('Hello',function(orgArg){marketEvents(orgArg,your_args);}); – gregko

1

您可以創建一個調用marketEvent函數的函數。不需要的東西

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

否則,你可以做到這一點複雜:

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

session.sub('Hello', mrktEvent("customEvent")); 
相關問題