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

标签 javascript events html5-video dom-events atomic

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

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();
}

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

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

关于javascript - JavaScript 中的媒体事件是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400072/

相关文章:

javascript - Onload 事件不起作用,但函数可与 onclick 事件 javascript 一起使用

javascript - 如果没有 getElement 方法,代码的简写如何工作?有人可以解释并详细说明这个类比吗

android - 在android webview中全屏播放HTML5视频

streaming - IIS 是否可以与 html5 播放器流畅地进行流媒体工作

javascript - 如何在whatsapp共享消息中写入用户输入

javascript:将 html 添加到 <span> 末尾(菜鸟)

wpf - 当底层 Viewmodel 指示它应该时,如何在 View 触发器上设置 WPF EventTrigger?

javascript - 如何在拉斐尔中使用 eve()?

c# - 集合更改时触发事件(添加或删除)

html5-video - 有关video.js的一些普遍疑问