diff --git a/web-app/src/components/collapse/CollapseActive.vue b/web-app/src/components/collapse/CollapseActive.vue index 57a6f2f..dd7798e 100644 --- a/web-app/src/components/collapse/CollapseActive.vue +++ b/web-app/src/components/collapse/CollapseActive.vue @@ -216,14 +216,17 @@ async function unstakePosition() { const POLL_INTERVAL_MS = 1000; const TIMEOUT_MS = 30_000; const deadline = Date.now() + TIMEOUT_MS; - while (Date.now() < deadline) { - const { positions } = await loadActivePositions(currentChainId.value); - if (!positions.some(p => BigInt(p.id) === props.id)) break; - // eslint-disable-next-line no-restricted-syntax -- Poll interval; Ponder has no push endpoint. See AGENTS.md #Engineering Principles. - await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS)); + try { + while (Date.now() < deadline) { + const { positions } = await loadActivePositions(currentChainId.value); + if (!positions.some(p => BigInt(p.id) === props.id)) break; + // eslint-disable-next-line no-restricted-syntax -- Poll interval; Ponder has no push endpoint. See AGENTS.md #Engineering Principles. + await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS)); + } + await loadPositions(currentChainId.value); + } finally { + loading.value = false; } - await loadPositions(currentChainId.value); - loading.value = false; } async function loadActivePositionData() {