Как решить Uncaught (в обещании) DOMException в Responsive Voice JS? - PullRequest
0 голосов
/ 05 июля 2019

Я использую отзывчивый голос и использую async / await / обещание и мою проблему, когда установлен автоматический и установлен тайм-аут, чтобы убедиться, что все загружается, но вызывающая функция, которая вызывает отзывчивый голос. Это бросает меня Uncaught (в обещании) DOMException . Но когда я вызываю эту функцию по событию нажатия кнопки, все работает нормально и пробовал мой код в jsfiddle. Это тоже нормально работает. Не знаю, как решить эту проблему. Кто-нибудь пытался сделать как я и получить ту же ошибку?

Это мой код, я работаю на .NET

<!DOCTYPE html>
<html>
<head>
<title></title>


<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>

<script src="https://code.responsivevoice.org/responsivevoice.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
<script>
    var obj1;
    var obj2;
    var interval = 1;



    function iteration(){
        Promise.all([get1(), get2()])
          .catch(error => {
              console.log(error.message)
          })
          .then(values => {
              var leng = _.filter(_.union(obj1, obj2), function(obj){return obj.announce == "1"}).length;

        interval = leng > 0 ? leng : 1;
        console.log(interval*6000);
        //setTimeout(iteration, interval*6000);
    });
    }

    function renderAnnounce(queue){
        console.log(queue)
        return new Promise(function(resolve, reject){
            if(queue.announce == "1"){

                var speechHeaderTH = "";
                var speechFooterTH = "";
                var langTH = "";

                var speechHeaderEN = "";
                var speechFooterEN = "";
                var langEN = "";

                var speechBody = "";

                speechHeaderTH = "สวัสดีครับคุณ ";
                speechFooterTH = " เดินไปที่ " + queue.base_counter + " ค่ะ";
                langTH = "Thai Female";

                speechHeaderEN = "Hello  ";
                speechFooterEN = " go to point number " + queue.base_counter;
                langEN = "US English Female";

                for (var i = 0; i < queue.queue_name.length; i++) {
                    speechBody += queue.queue_name.charAt(i) + " ";
                }

                var textSpeechTH = speechHeaderTH + speechBody + speechFooterTH;
                var textSpeechEN = speechHeaderEN + speechBody + speechFooterEN;

                var runEnglistSpeech = function () {
                    responsiveVoice.speak(textSpeechEN, langEN, { rate: .7, onend: resolve});

                };
                responsiveVoice.speak(textSpeechTH, langTH, { rate: .9, onend: resolve });
            }else{
                resolve(true);
            }

        });
    }


    function get1() {
        return new Promise(function (resolve, reject) {

            obj1 = [{queue_name:"123", base_counter:"5", announce:"1"}, {queue_name:"543", base_counter:"3", announce:"1"}
            ];
            var j = obj1.length;
            if(j > 0){
                (async () => {
                    for (let i = 0; i < j; i++) {
                        await renderAnnounce(obj1[i]);
                    }
                resolve(true);
            })();
        }else{
          resolve(true);
    }
    });
    }

    function get2() {
        return new Promise(function (resolve, reject) {

            obj2 = [];
            resolve(true);


        });
    }

    $(document).ready(function () {
        //$('#btn-click').click(function(){
        //    iteration();
        //})
        setTimeout(function(){
            $('#btn-click').trigger('click');                
        }, 10000);

    })
</script>


</head>
<body>
    <button id="btn-click" onclick="iteration()">CLICK</button>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...