In der Welt des asynchronen JavaScript geht es beim Verständnis des Umgangs mit Zeitüberschreitungen und Abbrüchen nicht nur um Tools wie AbortController – es geht darum, belastbare und anpassungsfähige Lösungen für jedes Szenario zu entwickeln.
Die AbortController-API hat sich zu einer Lösung der Wahl für den Umgang mit Aufgabenabbrüchen entwickelt, insbesondere in modernen Projekten. Abhängig vom Kontext oder der Umgebung, in der Sie arbeiten, ist dies jedoch nicht immer die ideale Wahl – oder auch nur eine verfügbare.
In diesem Blog untersuchen wir alternative Methoden zur Verwaltung asynchroner Zeitüberschreitungen, ohne auf AbortController angewiesen zu sein.
async function customAbortController(asyncFunction, timeout = 5000) { return async (...args) => { const timeoutPromise = new Promise((_, reject) => { const id = setTimeout(() => { clearTimeout(id) reject(new Error(`Operation timed out after ${timeout} ms`)) }, timeout) }) try { return await Promise.race([asyncFunction(...args), timeoutPromise]) } catch (error) { throw error } } } const abortControllerWrapper = async (asyncFunction, params) => { const response = await customAbortController(asyncFunction, 5000) return response(params); } // Example usage const getUsers = async () => { const response = await fetch('https://jsonplaceholder.typicode.com/users') // handle response the way you prefer. } const getTodoById = async (id) => { const response = await fetch(`https://jsonplaceholder.typicode.com/todos/${id}`) // handle response the way you prefer. } const loadUsers = async () => { try { const response = await abortControllerWrapper(getUsers); // handle response the way you prefer. } catch (error) { console.error("ERROR", error.message) // "Operation timed out after 5000 ms" } } loadUsers(); // Try out yourself for getTodoById ?
In Javascript gibt es für Promise keine offizielle Möglichkeit, sich selbst zu kündigen.
Wir nutzen hier also die Promise.race()-Methode.
Wir erstellen ein Dummy-Promise, das in einer bestimmten Zeit aufgelöst wird, und vergleichen es mit dem tatsächlichen API-Aufruf, sodass wir entweder die API-Antwort erhalten oder das Versprechen ablehnen, nachdem die Zeitüberschreitung überschritten wurde.
Ich hoffe, dieser Code war hilfreich?!
Sie können es gerne an Ihre Bedürfnisse anpassen und mir mitteilen, wie Sie sich dabei gefühlt haben ❤️
Das obige ist der detaillierte Inhalt vonAlternative zu AbortController zur Behandlung von Async-Timeouts in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!