我正在使用响应语音,并使用异步/等待/承诺,而在设置自动和设置超时以确保每件事都加载了调用响应语音的调用函数时,我遇到了问题。它使我未捕获(承诺)的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>