setTimeout, кажется, становится короче - PullRequest
1 голос
/ 08 мая 2019

Я пишу приложение чат-бота и хотел поймать несколько пользовательских вводов, выполняя размытие из поля ввода и фокусируясь обратно через 3 секунды (когда бот ответил).

Я использовал setTimeout для этого, и он работает в первый раз, но кажется, что он становится короче после многократного вызова функции.

Код, который я использовал, находится в виджете чата React и выглядит так:

handleKeyPress = (e: KeyboardEvent) => {
    if (e.keyCode === 13 && this.input.value.replace(/\s/g, "")) {
        this.input.blur();
        this.say(this.input.value);
        // Reset input value
        this.input.value = "";
        this.refocus(document.getElementById('userText'));
    }
};

refocus = (element: HTMLElement) => {
    var time = setTimeout(function() {
        element.focus();
    }, 3000);
};

В этом коде я использую setTimeout после отправки сообщения в бэк-приложение бота, чтобы у бота было время для ответа.

Я не могу понять, почему это не работает, и мог бы действительно использовать некоторые предложения ...

1 Ответ

0 голосов
/ 08 мая 2019

Я нашел решение для моей проблемы.Похоже, что проблема была связана с методами focus() / blur().Я использовал disable = true и disable = false и focus() после 3-секундной задержки, и теперь задержка всегда равна 3 секундам.

Код теперь выглядит так:

handleKeyPress = (e: KeyboardEvent) => {
    if (e.keyCode === 13 && this.input.value.replace(/\s/g, "")) {
        this.input.disabled = true;
        this.say(this.input.value);
        // Reset input value
        this.input.value = "";
        this.enable((document.getElementById('userText') as HTMLInputElement));
    }
};

enable = (element: HTMLInputElement) => {
    setTimeout(function() {
        element.disabled = false;
        element.focus();
    }, 3000);
};
...