Передать дополнительный аргумент в функцию обратного вызова
У меня есть функция callWithMagic, которая принимает функцию обратного вызова в качестве параметра и вызывает её с одним аргументом.
const callWithMagic = callback => {
const magic = getMagic();
callback(magic);
};
Также у меня есть функция processMagic, которая принимает два аргумента: magic и theAnswer.
const processMagic = (magic, theAnswer) => {
someOtherMagic();
};
Я хочу передать функцию processMagic как аргумент в callWithMagic, но также хочу передать 42 в качестве второго параметра (theAnswer) для processMagic. Как это можно сделать?
callWithMagic(<что мне сюда передать?>);
3 ответ(ов)
Вы можете связать объект аргумента с функцией обратного вызова следующим образом:
var varObject = {var1: "findButton", var2: true};
function cbFunc() {
console.log(this.var1 + ":" + this.var2);
}
// Пример обратного вызова
datatable.ajax.reload(cbFunc.bind(varObject));
В этом примере метод bind создаёт новую функцию, которая при вызове всегда будет иметь this, установленный на varObject. Таким образом, когда cbFunc будет вызвана, она сможет получить доступ к свойствам var1 и var2 из varObject.
Вы можете использовать анонимную функцию, например:
session.sub('Hello', function() {
marketEvents(ваши аргументы);
});
Таким образом, вы сможете передать необходимые аргументы в функцию marketEvents.
Вы можете создать функцию, которая будет вызывать функцию 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"));
Оба эти подхода вполне работоспособны.
Установка значения по умолчанию для параметра функции в JavaScript
Как передать параметр в колбек setTimeout()?
Передача функции JavaScript в качестве параметра
В чем разница между call и apply?
Как лучше реализовать необязательные параметры функций в JavaScript?