Я объявил функцию обратного вызова и хочу вызвать ее .... но не удалось .... как я могу вызвать ее напрямую? - PullRequest
0 голосов
/ 07 апреля 2020

Кодированная функция для класса .... и определение в классе ... функция вызывается в начале ... как предотвратить это и вызвать ее, как в тесте функции .... который дает описанное ошибка?

...

// ==========================================================================================
// Action class - coded for onMsg to bring it to work....please change if needed
// ==========================================================================================
let action = new class Action {
    constructor() {
        this.msgFunction = (msg) => { msg };
        this.msg = { message: 'Hello!', to_user: 'PeterPan', from_user: 'AlexanderTheGreat' };
        this.onMsg = (MsgFunction) => { MsgFunction(this.msg) };
    }
}

// ==========================================================================================
// action functions: directly called at start - please NOT change
// ==========================================================================================
//let totalTokens = 0;
action.onMsg(function(msg) {
    console.log('==== onMsg ====');
});

// ==========================================================================================
// This is what I want: call the onMsg functions at any time!
// got error:
//      index.js:8 Uncaught TypeError: MsgFunction is not a function
//          at Action.onMsg (index.js:8)
//          at test (index.js:22)
//          at <anonymous>:1:1
// when I write "test()" in the console!
// ==========================================================================================
function test() {
    console.log('==== test ====')
    action.onMsg(action.msgFunction(action.msg));
}

...

1 Ответ

0 голосов
/ 07 апреля 2020

В JavaScript вы можете передать ссылку на функцию в качестве аргумента. В вашем коде в строке 8 (где ошибка) указано передаваемый вами аргумент (строка 2 из test())

Например: var myFunc = action.msgFunction является ссылкой на функцию, поэтому вы можете вызвать это позже. Тогда как action.msgFunction(action.msg) - это то, что возвращается этой функцией.

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

function test() {
    console.log('==== test ====')
    action.onMsg(action.msgFunction);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...