0

Передать дополнительный аргумент в функцию обратного вызова

9

У меня есть функция callWithMagic, которая принимает функцию обратного вызова в качестве параметра и вызывает её с одним аргументом.

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

Также у меня есть функция processMagic, которая принимает два аргумента: magic и theAnswer.

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

Я хочу передать функцию processMagic как аргумент в callWithMagic, но также хочу передать 42 в качестве второго параметра (theAnswer) для processMagic. Как это можно сделать?

callWithMagic(<что мне сюда передать?>);

3 ответ(ов)

0

Вы можете связать объект аргумента с функцией обратного вызова следующим образом:

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.

0

Вы можете использовать анонимную функцию, например:

session.sub('Hello', function() {
    marketEvents(ваши аргументы);
});

Таким образом, вы сможете передать необходимые аргументы в функцию marketEvents.

0

Вы можете создать функцию, которая будет вызывать функцию 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"));

Оба эти подхода вполне работоспособны.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь