speechSynthesis.getVoices() returns Windows 上的空数组
speechSynthesis.getVoices() returns empty array on Windows
我正在制作一个 Chrome 扩展,我在其中使用了语音合成。当我在 控制台 中键入 speechSynthesis.getVoices()
时,我得到一个 21 种不同声音的数组 。伟大的!
当我 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...
在这里,在每个时间间隔之后,我们检查 getVoices()
返回的 voices 数组是否为空。如果不是,我们最终会兑现承诺...
我正在制作一个 Chrome 扩展,我在其中使用了语音合成。当我在 控制台 中键入 speechSynthesis.getVoices()
时,我得到一个 21 种不同声音的数组 。伟大的!
当我 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...
在这里,在每个时间间隔之后,我们检查 getVoices()
返回的 voices 数组是否为空。如果不是,我们最终会兑现承诺...