Я использую отзывчивый голос и использую 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>