Skip to content
This repository was archived by the owner on Dec 21, 2021. It is now read-only.

Commit 1eaa55a

Browse files
committed
perf(util): Clean up dangling Defers in LimitAsyncFnByKey.
1 parent 2638f2b commit 1eaa55a

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/utils/index.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -314,21 +314,26 @@ export function LimitAsyncFnByKey<KeyType>(limit = 1) {
314314
// clean up if no more active entries (if not cleared)
315315
pending.delete(id)
316316
}
317-
queueOnEmptyTasks.delete(id)
317+
318+
if (queueOnEmptyTasks.has(id)) {
319+
queueOnEmptyTasks.get(id).resolve(undefined)
320+
queueOnEmptyTasks.delete(id)
321+
}
322+
318323
onQueueEmpty.resolve()
319324
}
320325
}
321326
}
322327

323328
f.getOnQueueEmpty = async (id: KeyType) => {
324-
return queueOnEmptyTasks.get(id) || pending.set(id, Defer()).get(id)
329+
return queueOnEmptyTasks.get(id) || queueOnEmptyTasks.set(id, Defer()).get(id)
325330
}
326331

327332
f.clear = () => {
328333
// note: does not cancel promises
329334
pending.forEach((p) => p.clearQueue())
330335
pending.clear()
331-
queueOnEmptyTasks.forEach((p) => p.resolve())
336+
queueOnEmptyTasks.forEach((p) => p.resolve(undefined))
332337
queueOnEmptyTasks.clear()
333338
}
334339
return f

0 commit comments

Comments
 (0)