媒体事件在JavaScript中是原子的吗?

媒体事件在JavaScript中是原子的吗?,javascript,events,html5-video,dom-events,atomic,Javascript,Events,Html5 Video,Dom Events,Atomic,我正在写一个web应用程序。正在播放多个视频,当视频停止播放时,将捕获结束的事件。调用的代码如下所示: var nextVideoSrc = getNextSrc(); if(nextVideoSrc === null) { setVideoSrc(video, videoSrcs[index]); index = (index + 1) % videoSrcs.length; } else setVideoSrc(video, videoSrcs[index]); 基

我正在写一个web应用程序。正在播放多个视频,当视频停止播放时,将捕获结束的事件。调用的代码如下所示:

var nextVideoSrc = getNextSrc();
if(nextVideoSrc === null) {
    setVideoSrc(video, videoSrcs[index]);
    index = (index + 1) % videoSrcs.length;
} else
    setVideoSrc(video, videoSrcs[index]);

基本上,它会寻找一个新的视频url,当找不到视频url时,它会从一个池(url数组)中获取一个视频(url)。正如我所说的,不止一个视频在同一时间播放。所以我的问题是:当两个视频同时抛出结束事件时,这些函数是原子的吗?因为当情况并非如此时,递增的同一索引可以使用两次。例如,第一个视频使用
videoSrcs[index]
,第二个视频的结束事件在这两个视频之间运行并使用相同的索引。

JavaScript完全是单线程的。每次触发停止事件时,它都会被置于
消息队列中。有一个
事件循环
,它迭代地检查
消息队列
中是否有新事件,并在进入下一个事件之前执行它们直到完成

事件循环类似于以下内容:

while(queue.waitForMessage()){
  queue.processNextMessage();
}
这意味着您不必担心事件同时发生,增量将始终按顺序处理


如果您想了解有关JavaScript并发模型的更多信息。

视频结束事件不是原子事件,但我认为您想知道它们是否是线程安全的。答案是肯定的,因为JavaScript代码是在单个线程中执行的(第二个事件的代码在第一个事件的代码或工作线程之外的任何其他执行代码完成之前不会执行)。感谢您的澄清!