是JavaScript中的原子媒体事件

Are media events atomic in JavaScript?

本文关键字:媒体 事件 JavaScript      更新时间:2023-09-26

我正在编写一个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完全是单线程的。每次触发停止事件时,都会将其置于message queue上。有一个event loop,它迭代地检查message queue中的新事件,并在进入下一个事件之前执行它们to completion

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

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

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

如果您想了解更多关于JavaScript并发模型的信息,这里有一个方便的来源。