系统相关
首页 > 系统相关> > javascript – speechSynthesis.getVoices()在Windows上返回空数组

javascript – speechSynthesis.getVoices()在Windows上返回空数组

作者:互联网

我正在制作Chrome扩展程序,我正在使用语音合成.当我在控制台中键入speechSynthesis.getVoices()时,我得到一个包含21种不同声音的数组.大!

当我在我的javascript代码中的console.log()同一行时,我在控制台中得到一个空数组.怎么了,我想不出来!

解决方法:

正如@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()返回的语音数组是否为空.如果不是,我们最终会解决这个承诺……

标签:javascript,arrays,windows,voice,speech-synthesis
来源: https://codeday.me/bug/20190710/1425813.html