diff options
| author | Outvi V <git@outv.im> | 2025-05-31 10:09:46 +0800 |
|---|---|---|
| committer | Outvi V <git@outv.im> | 2025-05-31 10:09:46 +0800 |
| commit | 5e6c6fccc482283bfd0fc369557ffab6cf8617bd (patch) | |
| tree | bf66aea13f509cf48fb62db26b35745ce64b5712 /packages/frontend/src/components | |
| parent | feat(page.note): add delay and retry to embedded note loading (diff) | |
| download | sharkey-5e6c6fccc482283bfd0fc369557ffab6cf8617bd.tar.gz sharkey-5e6c6fccc482283bfd0fc369557ffab6cf8617bd.tar.bz2 sharkey-5e6c6fccc482283bfd0fc369557ffab6cf8617bd.zip | |
chore: lint
Diffstat (limited to 'packages/frontend/src/components')
| -rw-r--r-- | packages/frontend/src/components/page/page.note.vue | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/packages/frontend/src/components/page/page.note.vue b/packages/frontend/src/components/page/page.note.vue index 98f72f0d9d..f459a437d2 100644 --- a/packages/frontend/src/components/page/page.note.vue +++ b/packages/frontend/src/components/page/page.note.vue @@ -25,52 +25,54 @@ const props = defineProps<{ const note = ref<Misskey.entities.Note | null>(null); -let timeoutId = null; +// eslint-disable-next-line id-denylist +let timeoutId: ReturnType<typeof window.setTimeout> | null = null; async function sleep(ms: number): Promise<void> { - return new Promise((resolve) => { - setTimeout(() => { - resolve() + return new Promise((resolve) => { + window.setTimeout(() => { + resolve(); }, ms); }); } -async function retryOnThrottle<T>(f: ()=>Promise<T>, retryCount: number = 5): Promise<T> { - let lastResult: T = undefined!; - const r = Math.random(); - for(let i=0; i<retryCount; i++) { +async function retryOnThrottle<T>(f: ()=>Promise<T>, retryCount = 5): Promise<T> { + let lastResult: T; + for (let i = 0; i < retryCount; i++) { const [ok, resultOrError] = await f() .then(result => [true, result]) .catch(err => [false, err]); - - lastResult = resultOrError; + + lastResult = resultOrError; if (ok) { break; } // RATE_LIMIT_EXCEEDED - if (resultOrError?.id === "d5826d14-3982-4d2e-8011-b9e9f02499ef") { + if (resultOrError?.id === 'd5826d14-3982-4d2e-8011-b9e9f02499ef') { await sleep(resultOrError?.info?.fullResetMs ?? 1000); continue; } throw resultOrError; } - return lastResult; + return lastResult; } onMounted(() => { if (props.block.note == null) return; - timeoutId = setTimeout(() => { + timeoutId = window.setTimeout(() => { retryOnThrottle(() => misskeyApi('notes/show', { noteId: props.block.note })).then(result => { - note.value = result; + note.value = result; }); }, 500 * props.index); // rate limit is 2 reqs per sec }); onUnmounted(() => { - if (timeoutId !== null) clearTimeout(timeoutId); + if (timeoutId !== null) { + window.clearTimeout(timeoutId); + } }); </script> |