我正在制作依赖于来自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/