3 回答

TA貢獻1802條經驗 獲得超5個贊
當您第二次調用它時,該didAboutMove標志將為真,然后您進入 if 塊,該塊只是返回而不解析承諾:
if (didAboutMove && aboutAnimation) {
aboutAnimation.reverse();
didAboutMove = !didAboutMove;
return; // This is the problem
}
因此,您需要通過解決或拒絕它來解決承諾。但是,從您的邏輯來看,您只是打算反轉動畫,所以也許您根本不需要返回任何東西。

TA貢獻1801條經驗 獲得超16個贊
你正在解決你onComplete的承諾onReverseComplete。gsap.timeline此外,您將從 Promise 函數的回調中返回,基于 didAboutMove && aboutAnimation它不在函數內部的范圍內。因此,當您第一次調用該函數時。它設置值didAboutMove等等aboutAnimation,下一次調用解析不會被觸發。因為函數之前返回。
if (didAboutMove && aboutAnimation) {
// This block will execute in second run.
aboutAnimation.reverse();
didAboutMove = !didAboutMove;
return; // Returns from here in second run.
}
didAboutMove = !didAboutMove; // assigned truthy value on first run
aboutAnimation = gsap.timeline // assigned truthy value on first run

TA貢獻1818條經驗 獲得超3個贊
你沒有返回相同的Promise。每次調用時,您都在創建一個新的aboutMove。
考慮到這段代碼
if (didAboutMove && aboutAnimation) {
aboutAnimation.reverse();
didAboutMove = !didAboutMove;
return;
}
如果didAboutMove和aboutAnimation都為真,您將退出承諾初始化程序并且永遠不會解決承諾。
您很可能需要在調用此方法之前重置這兩個標志。
添加回答
舉報