我正在做一个Chrome 扩展程序,其中我正在使用语音合成。当我打字时speechSynthesis.getVoices()
in the console我得到一个21种不同声音的阵列。伟大的!
When I console.log()
在我的 javascript 代码中的同一行,我得到一个空数组在控制台中。这是怎么回事,我想不通!
正如 @CertainPerformance 在评论中指出的,加载页面时,需要花费一些时间来异步填充语音数组。因此,当页面加载后立即将数组登录到控制台时,我们会看到一个空数组......
为了解决这个问题,我们在控制台之后记录它某个时间(例如,10 或 50 毫秒):
setTimeout(() => {
console.log(window.speechSynthesis.getVoices());
}, <time_in_ms>);
如果你想达到同样的效果Promises
,那么,代码如下:
function setSpeech() {
return new Promise(
function (resolve, reject) {
let synth = window.speechSynthesis;
let id;
id = setInterval(() => {
if (synth.getVoices().length !== 0) {
resolve(synth.getVoices());
clearInterval(id);
}
}, 10);
}
)
}
let s = setSpeech();
s.then((voices) => console.log(voices)); // Or any other actions you want to take...
在这里,在每个时间间隔之后,我们检查是否voices返回的数组getVoices()
是否为空。如果不是,我们最终会兑现承诺......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)