我正在编写一个Web应用程序。正在播放多个视频,并且当视频停止播放时,捕获已结束的事件。调用的代码片段如下:
var nextVideoSrc = getNextSrc();
if(nextVideoSrc === null) {
setVideoSrc(video, videoSrcs[index]);
index = (index + 1) % videoSrcs.length;
} else
setVideoSrc(video, videoSrcs[index]);
基本上,它会查找新的视频网址,当找不到视频网址时,它会从池中获取视频(网址)(网址数组)。正如我所说的,同时播放了多个视频。所以我的问题是:当两个视频同时抛出结束的事件时,这些函数是否是原子的?因为当不是这种情况时,增加的相同索引可以使用两次。例如,第一个视频使用videoSrcs [index],第二个视频中的结束事件在两者之间运行并使用相同的索引。
答案 0 :(得分:2)
JavaScript完全是单线程的。每次触发停止事件时,它都会放在message queue
上。有event loop
迭代检查message queue
新事件并执行它们to completion
,然后再转到下一个事件。
事件循环类似于:
while(queue.waitForMessage()){
queue.processNextMessage();
}
这意味着您不必担心同时发生的事件,并且您的增量将始终按顺序处理。
Here's a handy source如果您想了解有关JavaScript并发模型的更多信息。