Javascript 比赛条件:试图在视频加载前播放视频
我正在用ReactJS开发一个视频播放器。基本上,我已经设置了一个基于cookies的介绍视频,它是可以跳过的。当它被跳过时,我希望我的主视频开始自动播放。我这样做的方式看起来是这样的(问题在于setTimeout()部分,我知道这毫无意义)Javascript 比赛条件:试图在视频加载前播放视频,javascript,reactjs,video,Javascript,Reactjs,Video,我正在用ReactJS开发一个视频播放器。基本上,我已经设置了一个基于cookies的介绍视频,它是可以跳过的。当它被跳过时,我希望我的主视频开始自动播放。我这样做的方式看起来是这样的(问题在于setTimeout()部分,我知道这毫无意义) 如果我不使用setTimeout,那么this.videoRef.play()不执行。起初我认为这是因为它是在主视频加载之前被异步调用的。因为我等了0毫秒,所以我很困惑。为什么这样做有效?我真的希望在没有setTimeout调用的情况下执行此操作。setT
如果我不使用setTimeout,那么
this.videoRef.play()代码>不执行。起初我认为这是因为它是在主视频加载之前被异步调用的。因为我等了0毫秒,所以我很困惑。为什么这样做有效?我真的希望在没有setTimeout调用的情况下执行此操作。setTimeout
有点欺骗,因为它不会在超时后立即执行,而是在超时后将函数添加到队列中。对于0ms,它不会立即执行,而是立即将其添加到当前队列中
这并不一定意味着它将立即执行,而是将函数添加到队列中,其他调用可能正在等待执行。如果没有超时,它可能会在需要进行任何其他调用之前执行。更多信息,请参阅
在您的情况下,这可能意味着在不使用setTimeout
的情况下调用时,主视频播放所需的某些内容没有完成,但在使用setTimeout
时,您仍在延迟执行
您还可以查看以下任一StackOverflow帖子:
setTimeout
有点骗人,因为它不会在超时后立即执行,而是在超时后将函数添加到队列中。对于0ms,它不会立即执行,而是立即将其添加到当前队列中
这并不一定意味着它将立即执行,而是将函数添加到队列中,其他调用可能正在等待执行。如果没有超时,它可能会在需要进行任何其他调用之前执行。更多信息,请参阅
在您的情况下,这可能意味着在不使用setTimeout
的情况下调用时,主视频播放所需的某些内容没有完成,但在使用setTimeout
时,您仍在延迟执行
您还可以查看以下任一StackOverflow帖子:
这可能不是问题的根源,只是一个良好实践的问题。如果要将状态作为旧状态的函数进行更新,则应使用functionalsetState((prevState)=>{index:prevState.index+1})
模式。这里有更多的细节和细节。谢谢。我有很多追溯编辑要做。。。现在比以前更应该知道它会导致问题!这可能不是你问题的根源,只是一个良好实践的问题。如果要将状态作为旧状态的函数进行更新,则应使用functionalsetState((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);
}
}