javascript - 竞争条件 : Trying to play a video before it loads React

标签 javascript reactjs video

我正在使用 ReactJS 开发视频播放器。基本上,我已经设置了一个基于 cookie 的介绍视频,它是可以跳过的。跳过时,我希望我的主视频自动开始播放。我这样做的方式看起来像这样(问题出在 setTimeout() 部分,我知道这没有意义)

  skipIntro() {
    if (this.state.index === 0) {
        this.handleVisit(MAX_COOKIES_INTRO);
        this.setState({
            index: ++this.state.index,
        });
        this.videoRef.updatePlaybackTime(0);
        setTimeout(() => {
                            this.videoRef.play();
                          }, 0);
    }
}

如果我不使用 setTimeout,则 this.videoRef.play(); 不会执行。起初我以为这是因为它在主视频加载之前被异步调用。因为我在等待 0ms,所以我很困惑。为什么这行得通?我真的更愿意在没有 setTimeout 调用的情况下执行此操作。

最佳答案

setTimeout 有点欺骗,它不会在它的时间后立即执行,而是在超时后将函数添加到队列中。在0ms的情况下,不是立即执行,而是立即加入当前队列。

这并不一定意味着它将立即执行,而是将函数添加到队列中,其他调用可能正在等待执行。如果没有超时,它可能会在需要进行任何其他调用之前执行。参见 this MDN page了解更多。

在您的情况下,这可能意味着当您在没有 setTimeout 的情况下调用时主视频播放所需的内容未完成,但在使用 setTimeout 时,您仍然延迟执行。

您还可以查看以下任一 StackOverflow 帖子:

What is setTimeout doing when set to 0 milliseconds?

Why is setTimeout(fn, 0) sometimes useful?

关于javascript - 竞争条件 : Trying to play a video before it loads React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48530015/

相关文章:

javascript - 带有 requirejs 的 Emberjs 路由器

javascript - React Hooks - 如何重构这些动态生成的输入?

c# - 如何从 H.264 视频流中提取图像?

javascript - 使用 jquery 解开视频标签

javascript - 如何使用 javascript 将文本框值转换为 Firefox 和 Internet Explorer 中的日期格式

javascript - HTML + 黑白父子传递参数

javascript - 仅对 Fabric.js 中的一个对象进行字符串化

.net - 您无法使用 PaymentMethod 创建费用。请改用支付意图 API

javascript - babel-loader@7.1.2 需要 webpack@2 || 的对等点3 但没有安装

video - 除了渲染帧之外,还有什么方法可以计算 ffmpeg 输出尺寸?