Javascript 为什么在设置src时音频元素会中止事件?

Javascript 为什么在设置src时音频元素会中止事件?,javascript,html,html5-audio,Javascript,Html,Html5 Audio,我不清楚在HTML5audio元素上设置src时会发生什么,规范也没有太大帮助 具体地说,我的问题是: const audio = new Audio() audio.src = "first.mp3" audio.onratechange = e => console.log('[RATE CHANGE]', e.target.playbackRate) audio.playbackRate = 0.5 audio.src = "second.mp3" audio.src = "th

我不清楚在HTML5
audio
元素上设置
src
时会发生什么,规范也没有太大帮助

具体地说,我的问题是:

const audio = new Audio()
audio.src = "first.mp3"
audio.onratechange = e => console.log('[RATE CHANGE]', e.target.playbackRate)

audio.playbackRate = 0.5

audio.src = "second.mp3"
audio.src = "third.mp3"
设置
playbackRate
应该触发
ratechange
事件。但在上面的示例中,发生的情况是通过设置
src
,中止了“0.5”的事件(?)-相反,我们得到了“1”的
ratechange
,这源于将
playbackRate
重置为
defaultPlaybackRate

第一个被认为是不可取消的
费率更改事件发生了什么

此外,此
ratechange
事件也不会触发,因为再次设置
src
也会吞噬此事件。因此,我们最终必须设置
playbackRate
,并且根本不触发
ratechange
事件

见:


我想我遗漏了一些关于JS事件系统如何工作的基本信息???

您是否尝试过使用setTimeout设置src?JavaScript是单线程的,所以您设置的所有事情都是一次完成的,所以最可能发生的情况是系统只看到您将src设置为third.mp3并处理它。将src设置为零setTimeout将在大多数时间保留事件,但不总是,setTimeout>10ms似乎可以工作,但这相当混乱,不是吗?