Skip to content

Commit 5793e71

Browse files
committed
enhance(async-stack): use Set to store StackItemResolveListener
1 parent 0cdcc76 commit 5793e71

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

.changeset/selfish-moons-hope.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@svelte-put/async-stack': patch
3+
---
4+
5+
use `Set` instead of array for `StackItemResolveListener` to **help** avoid duplicated callbacks (should discourage the usage of arrow functions)

packages/async-stack/src/stack-item.svelte.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export class StackItem {
1414
/** @type {ReturnType<typeof setTimeout> | undefined} */
1515
timeoutId: undefined,
1616
lastStartedTime: new Date().getTime(),
17-
/** @type {import('./types.public').StackItemResolveListener<Resolved>[]} */
18-
resolveListeners: [],
17+
/** @type {Set<import('./types.public').StackItemResolveListener<Resolved>>} */
18+
resolveListeners: new Set(),
1919
/** @type {(r?: Resolved) => void} */
2020
resolve: () => {},
2121
};
@@ -60,7 +60,9 @@ export class StackItem {
6060
*/
6161
resolve = async (resolved) => {
6262
if (this.state === 'resolved' || this.state === 'timeout') return this.resolution;
63-
await Promise.all(this.#internals.resolveListeners.map((callback) => callback(resolved)));
63+
await Promise.all(
64+
Array.from(this.#internals.resolveListeners).map((callback) => callback(resolved)),
65+
);
6466
this.#internals.resolve(resolved);
6567
this.state = 'resolved';
6668
return this.resolution;
@@ -70,6 +72,6 @@ export class StackItem {
7072
* @param {import('./types.public').StackItemResolveListener<Resolved>} callback
7173
*/
7274
onResolve = (callback) => {
73-
this.#internals.resolveListeners.push(callback);
75+
this.#internals.resolveListeners.add(callback);
7476
};
7577
}

0 commit comments

Comments
 (0)