Javascript 比赛条件:试图在视频加载前播放视频

Javascript 比赛条件:试图在视频加载前播放视频,javascript,reactjs,video,Javascript,Reactjs,Video,我正在用ReactJS开发一个视频播放器。基本上,我已经设置了一个基于cookies的介绍视频,它是可以跳过的。当它被跳过时,我希望我的主视频开始自动播放。我这样做的方式看起来是这样的(问题在于setTimeout()部分,我知道这毫无意义) 如果我不使用setTimeout,那么this.videoRef.play()不执行。起初我认为这是因为它是在主视频加载之前被异步调用的。因为我等了0毫秒,所以我很困惑。为什么这样做有效?我真的希望在没有setTimeout调用的情况下执行此操作。setT

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


如果我不使用setTimeout,那么
this.videoRef.play()不执行。起初我认为这是因为它是在主视频加载之前被异步调用的。因为我等了0毫秒,所以我很困惑。为什么这样做有效?我真的希望在没有setTimeout调用的情况下执行此操作。

setTimeout
有点欺骗,因为它不会在超时后立即执行,而是在超时后将函数添加到队列中。对于0ms,它不会立即执行,而是立即将其添加到当前队列中

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

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

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


setTimeout
有点骗人,因为它不会在超时后立即执行,而是在超时后将函数添加到队列中。对于0ms,它不会立即执行,而是立即将其添加到当前队列中

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

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

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


这可能不是问题的根源,只是一个良好实践的问题。如果要将状态作为旧状态的函数进行更新,则应使用functional
setState((prevState)=>{index:prevState.index+1})
模式。这里有更多的细节和细节。谢谢。我有很多追溯编辑要做。。。现在比以前更应该知道它会导致问题!这可能不是你问题的根源,只是一个良好实践的问题。如果要将状态作为旧状态的函数进行更新,则应使用functional
setState((prevState)=>{index:prevState.index+1})
模式。这里有更多的细节和细节。谢谢。我有很多追溯编辑要做。。。现在比以前更应该知道它会导致问题!
  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);
    }
}