javascript - 在Javascript中,如何在发生错误时反复/递归地重新加载Audio对象?

标签 javascript audio html5-audio

我正在制作依赖于来自URL的流音频的软件,该URL用于存储在Google云端硬盘中的文件,在空闲大约5分钟后会超时并失败。这样做时,我希望刷新音频链接,并将时间设置为以前的音频。
要详细说明这个想法,请参见下面的示例代码:

export default class ReloadingAudio {
    constructor(url) {
        this.audio = new Audio(url)
        this.audio.onerror = () => {
            this.audio = new Audio(url)
        }
    }
}
第一次重新加载音频效果很好,但是由于创建的第二个新音频没有onerror功能,因此当再次超时时,不会重新加载音频。
我想知道,首先,是否有任何方法可以防止音频在Google驱动器文件上超时(它变成403禁止的错误),在这种情况下,我不需要这样做,其次,有没有一种好的方法来递归定义onerror函数,以便无论音频超时多少次它都会重复加载?
谢谢!
编辑
想补充一下,我确实找到了一个解决方案,但是我尝试只是更改AudioElement的src,并且这同样是一种有效的解决方案(而且我想更好地用于存储目的。)但是,出于好奇,这是一种递归的方法重置音频,您可以定义如下功能:

export default class ReloadingAudio {
    constructor(url) {
        this.audio = new Audio(url)

        const self = this

        function onerrorFunction() {
            self.audio = new Audio(url)
            self.audio.onerror = onerrorFunction
        }

        this.audio.onerror = onerrorFunction
    }
}

最佳答案

我不知道如何防止由Google云端硬盘引起的超时,但是您可以通过将src重置为现有url上的AudioElement来获得预期的行为。

this.audio.onerror = () => {
    this.audio.src = url;
}

关于javascript - 在Javascript中,如何在发生错误时反复/递归地重新加载Audio对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63208530/

相关文章:

javascript - 无法获得 sequelize 实例方法

ios - iPhone录音机导出压缩

ios - 在 Swift 中使用 AVPlayer。 iPhone 上没有错误,但没有声音

java - 检索并解码调幅正弦

Date 对象中的 Javascript 语法错误

javascript - addEventListener 没有附加我的函数?

php - 用户输入的带有 Javascript 的 HTML 显示给其他人但不是 HTML 转义的 XSS 示例

javascript - 播放新音频后,iPad 会清除任何早期缓冲的音频吗?

javascript - 插入音频元素会导致 CSS 错误

javascript - 使用 HTML5 录制语音并使用 ffmpeg 进行处理