fix: Properly handle promises that lead to hangs on swipes
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user