Heim > Web-Frontend > js-Tutorial > So verwenden Sie Promise.race, um eine Zeitüberschreitung zum Abrufen von Anrufen hinzuzufügen

So verwenden Sie Promise.race, um eine Zeitüberschreitung zum Abrufen von Anrufen hinzuzufügen

Mary-Kate Olsen
Freigeben: 2024-12-01 18:18:11
Original
277 Leute haben es durchsucht

How to use Promise.race to add timeout to fetch calls

Die Abruf-API ist sehr praktisch für Netzwerkanfragen, verfügt jedoch nicht über eine integrierte Timeout-Funktion. Dies bedeutet, dass Ihre App möglicherweise auf unbestimmte Zeit hängen bleibt, wenn das Netzwerk langsam ist oder der Server nicht antwortet.

Glücklicherweise ist JavaScript eine vielseitige Sprache, die sich auf ereignisgesteuerte Programmierung konzentriert und eine Reihe von Hilfsfunktionen bereitstellt, die im Promise-Objekt gruppiert sind. Mit der Promise.race-Methode können wir einen Timeout-Mechanismus für unsere Abrufaufrufe erstellen. Auf diese Weise können wir unsere Anwendungen reaktionsfähig halten, auch wenn die Dinge mit dem Netzwerk nicht wie geplant laufen.

Also, ich werde Ihnen zeigen, wie Sie dieses Timeout mit Promise.race implementieren. Wir beginnen mit einem einfachen Abrufbeispiel und erweitern es dann durch Hinzufügen eines Timeouts. Ich werde auch ein reales Szenario vorstellen, in dem wir mit CSRF-Tokens arbeiten, um Ihnen zu zeigen, wie diese Methode in einem sicheren Kontext funktioniert.

Nehmen wir an, wir haben Folgendes:

// Prepare fetch options
const options = {
    method: method,
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'X-CSRF-TOKEN': csrfToken
    },
    body: JSON.stringify({items})
};

// Make the fetch request
const response = await fetch(fetchUrl, options);
Nach dem Login kopieren

Wenn wir beim Abrufen einen Timeout-Mechanismus hinzufügen möchten, können wir ein Versprechen mit einem Timeout erstellen, das eine Ablehnung auslöst. Das Versprechen nutzt Promise.race, um mehrere Versprechen auszuführen, und wenn eines mit „Ablehnen“ oder „Auflösen“ endet, werden alle anderen gestoppt.

// Timeout mechanism for fetch
const fetchWithTimeout = (url, options, timeout = 5000) => {
    return Promise.race([
        fetch(url, options),
        new Promise((_, reject) => setTimeout(() => reject(new Error('Request timed out')), timeout))
    ]);
};

// Make the fetch request
const response = await fetchWithTimeout(fetchUrl, options);
Nach dem Login kopieren

Hier ist ein reales Beispiel mit CSRF-Tokens

// Validate CSRF token
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.content;
if (!csrfToken) {
    throw new Error('CSRF token not found in the document.');
}

// Prepare fetch options
const options = {
    method: method,
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'X-CSRF-TOKEN': csrfToken
    },
    body: JSON.stringify({items})
};

// Timeout mechanism for fetch
const fetchWithTimeout = (url, options, timeout = 5000) => {
    return Promise.race([
        fetch(url, options),
        new Promise((_, reject) => setTimeout(() => reject(new Error('Request timed out')), timeout))
    ]);
};

// Make the fetch request
const response = await fetchWithTimeout(fetchUrl, options);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Promise.race, um eine Zeitüberschreitung zum Abrufen von Anrufen hinzuzufügen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage