fix: Properly handle promises that lead to hangs on swipes

This commit is contained in:
joenunezb
2025-12-26 19:01:05 -08:00
parent 6b73e422de
commit b38dbe06a6
+9 -1
View File
@@ -14,6 +14,7 @@ let currentlyHiddenRange = null;
// Debounce restore to prevent loops // Debounce restore to prevent loops
let isRestoring = false; let isRestoring = false;
let restoreTimeout = null; let restoreTimeout = null;
let pendingResolve = null; // Track pending promise resolve function
/** /**
* Gets the current chapter checkpoint message ID for the active chat * Gets the current chapter checkpoint message ID for the active chat
@@ -129,13 +130,19 @@ export async function restoreCheckpointOnLoad() {
return; return;
} }
// Clear any pending timeout // Clear any pending timeout and resolve the pending promise
if (restoreTimeout) { if (restoreTimeout) {
clearTimeout(restoreTimeout); clearTimeout(restoreTimeout);
restoreTimeout = null;
}
if (pendingResolve) {
pendingResolve();
pendingResolve = null;
} }
// Debounce: wait 100ms before actually restoring // Debounce: wait 100ms before actually restoring
return new Promise((resolve) => { return new Promise((resolve) => {
pendingResolve = resolve; // Track this promise's resolve function
restoreTimeout = setTimeout(async () => { restoreTimeout = setTimeout(async () => {
isRestoring = true; isRestoring = true;
try { try {
@@ -174,6 +181,7 @@ export async function restoreCheckpointOnLoad() {
} }
} finally { } finally {
isRestoring = false; isRestoring = false;
pendingResolve = null;
resolve(); resolve();
} }
}, 100); }, 100);