javascript / expert
Snippet
Abbrechbare asynchrone Pipeline-Steuerung mittels AbortSignal in Svelte-Zuständen
Erstellt einen asynchronen Task-Wrapper mit AbortController, um veraltete asynchrone Operationen bei neuen Anfragen in Svelte-Zuständen automatisch abzubrechen. Dies verhindert Race Conditions und ungeordnete Zustand-Updates.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export function createCancellableTask(asyncFn) {let currentController = null;return async (...args) => {if (currentController) {currentController.abort('SUPERSEDE');}currentController = new AbortController();const { signal } = currentController;try {return await asyncFn(signal, ...args);} catch (err) {if (err === 'SUPERSEDE' || signal.aborted) return;throw err;}};}
svelte
Erklärung
1
let currentController = null;
Hält eine Referenz auf die aktive AbortController-Instanz zur Abbruchüberwachung.
2
if (currentController) { currentController.abort('SUPERSEDE'); }
Bricht laufende asynchrone Prozesse vor dem Start einer neuen Ausführung ab.
3
currentController = new AbortController();
Erstellt einen neuen AbortController zur Steuerung des aktuellen Durchlaufs.
4
return await asyncFn(signal, ...args);
Übermittelt das aktive AbortSignal direkt an die asynchrone Ziel-Funktion.
5
if (err === 'SUPERSEDE' || signal.aborted) return;
Unterdrückt Fehler gezielt, die durch beabsichtigte Task-Abbrüche entstanden sind.