2 回答

TA贡献1848条经验 获得超10个赞
这意味着我的 Promise 没有解决。我认为问题在于在承诺中发起承诺。
的确。在 的执行者回调中new Promise,您只调用setTimeout但从不调用resolve()or reject()。100 毫秒后的isTimestampReached调用确实创建并返回了自己的承诺,原始的“外部”承诺从未得到解决。你可以通过做来解决这个问题
setTimeout(() => {
resolve(this.isTimestampReached(timestampToWait);
}, 100);
但是使用async/await进行轮询要容易得多:
async isTimestampReached(timestampToWait) {
while (true) {
const currentTime = this.videoPlayerRef.controlButtonRef.getCurrentTime();
console.log(`timestampToWait: ${timestampToWait}, currentTime: ${currentTime}`);
if (timestampToWait < currentTime + 0.05 &&
timestampToWait > currentTime - 0.05) {
console.log('timestamp Reached !');
return true;
}
await new Promise(resolve => {
setTimeout(resolve, 100);
});
}
}
(您可以重构它以使用更好的循环条件,但您明白了)。

TA贡献1802条经验 获得超6个赞
await this.isTimestampReached(action.timestamp).then(() => {
then 不会被执行,因为你等待
使用以下
const res = await this.isTimestampReached(action.timestamp)
this.videoPlayerRef.setState({
paused: false,
});
console.log('setPlay');
或删除等待
this.isTimestampReached(action.timestamp).then(() => {
this.videoPlayerRef.setState({
paused: false,
});
console.log('setPlay');
});
添加回答
举报