gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:24:05 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com