Beim Auslösen asynchroner Netzwerkanfragen innerhalb reaktiver Watcher verursachen schnelle Zustandsaktualisierungen Race Conditions, bei denen veraltete Anfragen neuere Antworten überschreiben. Vue's watchEffect übergibt eine onCleanup-Registrierungsfunktion, mit der ein AbortController-Signal angehängt werden kann. Wenn sich die verfolgte reaktive Abhängigkeit ��ndert, bevor der vorherige Promise aufgelöst wird, führt der Cleanup-Callback abort() aus, storniert die ausgehende HTTP-Anfrage und ignoriert AbortError-Ausnahmen sicher.
import { watchEffect, ref } from 'vue';const query = ref('');const result = ref(null);watchEffect(async (onCleanup) => {const controller = new AbortController();onCleanup(() => controller.abort());try {const response = await fetch(`/api/search?q=${query.value}`, {signal: controller.signal});if (!response.ok) throw new Error(`HTTP status ${response.status}`);result.value = await response.json();} catch (err) {if (err.name !== 'AbortError') {console.error('Fetch operation failed:', err);}}});