JS: обратный вызов не является функцией внутри оператора if else - PullRequest
0 голосов
/ 03 июля 2019

Обратный вызов не распознается в операторе else функции при компиляции с использованием Google Chrome. Я получаю сообщение об ошибке в файле site.js при попытке запустить следующий код:

function changeSetting(callback) {
    var testswitch = document.getElementById("switch");
    if (testswitch.checked) {
        $.ajax({
            type: 'GET',
            url: '/api/ct/off/changeSetting',
            cache: false,
            error: function (jqXHR, textStatus, errorThrown) {
            },
            success: function (result) {
                //No error here
                callback();
            }
        });
    }
    else if (!testswitch.checked) {
        $.ajax({
            type: 'GET',
            url: '/api/ct/on/changeSetting',
            cache: false,
            error: function (jqXHR, textStatus, errorThrown) {
            },
            success: function (result) {
                //ERROR: Callback is not recognized as a function
                callback();
            }
        });
    } else {
        return;
    }
}

Единственный экземпляр этой вызываемой функции -

changeSetting(displayEmail());

Ошибка типа Uncaught: обратный вызов не является функцией

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Проблема заключается в вызове вашей функции.

<script>
function changeSetting(callback) {
....
}

function displayEmail() {
  return "email displayed"; // dummy value in this case 
}
</script>

Представьте себе, например, запуск этого кода.

changeSetting(displayEmail()); // first the display email function is evaluated

Обратите внимание, что мы вызываем функцию displayEmail() с паратезами (). Это означает, что мы собираемся запустить его и вернуть его значение return, независимо от того, является ли оно неопределенным или в нашем случае "email displayed".

После оценки функции, которую вы передаете как обратный вызов, она упрощается до чего-то, что не является функцией, отсюда и ошибка. Псевдо-это «упростит» до этого.

changeSetting("email displayed"); // "email displayed" is obviously not a function

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

changeSetting(displayEmail);
1 голос
/ 03 июля 2019

Передать только displayEmail вместо вызова его в параметре функции changeSetting

changeSetting(displayEmail);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...