Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Async\await + typescript, Функция зацикливается (https://javascript.ru/forum/events/69064-async%5Cawait-typescript-funkciya-zaciklivaetsya.html)

SiriusED 27.05.2017 18:21

Async\await + typescript, Функция зацикливается
 
Нашел я пример использования async\await, но я не догоню как это все работает, и у меня вторая версия функции где есть проверка на true, тупо зацикливается и так и потоянно выдает ответ, когда проверка срабатывает в true.

Вот коды функций:
// Работает как мне и надо
    speechIsEnded() {
        return new Promise<number>(function(speechEnded, rejected) {
            setTimeout(function() {
                console.log("Waiting....");
                    speechEnded(11111);
            }, 1000)
        });
    }
 
    // Не работает
    speechIsEnded() {
        return new Promise<number>(function(speechEnded, rejected) {
            setTimeout(function() {
                console.log("Waiting....");
                if (window.speechSynthesis.speaking) // Для теста проверяю на speaking == true
                {
                    speechEnded(11111); // вываливает в консоль постоянно когда speaking == true, и так тут и сидит на этой проверке каждую секунду
                }
            }, 1000)
        });
    }


Код вызова:
await this.speechIsEnded().then(function(response) {
            console.log(response); // При втором варианте функции постоянно выводит в консоль ответ, и при этом не завершает проверку, 
        });
 
        console.log("End");


Что не так? Где поправить что бы заработало как мне нужно?

SV0L0CH 03.06.2017 09:17

Не знаю как работает await, но моя "телепатия" подсказывает что надо бы добавить либо вызов rejectrd в блоке else в проверке, либо вызов catch при запуске проверки, либо и то и другое.

SiriusED 04.06.2017 14:02

Да да, сделал через setInterval(), а внутри реализовал через промисы. Все работает как нужно.


Часовой пояс GMT +3, время: 21:17.