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');
});
添加回答
舉報