Передать дополнительный аргумент в функцию обратного вызова
У меня есть функция 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?