«Uncaught TypeError: обратный вызов не является функцией» - Почему я получаю это? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь создать эффект «пишущей машинки» в javascript, который создает видимость «написания», а затем «удаления» слов из массива.У меня есть функция «spell», которая записывает каждое слово, и я хотел бы добавить функцию обратного вызова для функции «delete», чтобы после завершения ввода слова оно начинало удалять.

Однако,Я продолжаю получать следующую ошибку, когда я пытаюсь прикрепить обратный вызов:

main.js:35 Uncaught TypeError: callback is not a function
   at spell (main.js:35)
   at main.js:32

Это относится ко второй-последней строке в следующем блоке кода:

// SPELL OUT WORD FUNCTION
function spell(x, callback, length) {
    setTimeout(() => {
        wordBox.innerHTML += letterArray[wordLength - x];
        if (--x) spell(x);
    }, randTime);

    callback(length);       // <--- THIS IS THE ERROR
    }

Я полагаю, что ошибка также может быть связана с этим кодом, где я вызываю функцию 'spell', но я не уверен:

// CALL ADD WORD FUNCTION
spell(wordLength, remove, wordLength);

Я также прикрепил весь блок кода ниже также,Любые советы высоко ценится.Ура!

const words = [
    'creator.'
];

// START TYPEWRITER ON LOAD
window.addEventListener('load', typewriter);

function typewriter() {

    // LOOP FOR EACH WORD IN ARRAY
    for (let i = 0; i < words.length; i++) {
        const word = words[i];
        const wordLength = word.length;
        const letterArray = [];
        const wordBox = document.querySelector('#text');

        var timeArray = [500, 600, 700, 800];
        var randTime = timeArray[Math.floor(Math.random() * timeArray.length)];
        var deleteDelay = 300;
        var iterationDelay = 1000;


        // CREATE LETTER ARRAY
        for (let i = 0; i < wordLength; i++) {
            letterArray.push(word.charAt(i));
        }

        // SPELL OUT WORD FUNCTION
        function spell(x, callback, length) {
            setTimeout(() => {
                wordBox.innerHTML += letterArray[wordLength - x];
                if (--x) spell(x);
            }, randTime);

            callback(length);
        }

        // DELETE LETTERS FROM WORD FUNCTION
        function remove(y) {
            setTimeout(() => {
                const string = wordBox.textContent;
                const newString = string.substring(0, string.length - 1);
                wordBox.textContent = newString;
                if (--y) remove(y);
            }, deleteDelay);
        }

        // CALL ADD WORD FUNCTION
        spell(wordLength, remove, wordLength);
    }
}
...