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

时间:2014-10-16 08:51:20

标签: javascript events javascript-events html5-video atomic

我正在编写一个Web应用程序。正在播放多个视频,并且当视频停止播放时,捕获已结束的事件。调用的代码片段如下:

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

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

1 个答案:

答案 0 :(得分:2)

JavaScript完全是单线程的。每次触发停止事件时,它都会放在message queue上。有event loop迭代检查message queue新事件并执行它们to completion,然后再转到下一个事件。

事件循环类似于:

while(queue.waitForMessage()){
  queue.processNextMessage();
}

这意味着您不必担心同时发生的事件,并且您的增量将始终按顺序处理。

Here's a handy source如果您想了解有关JavaScript并发模型的更多信息。