Heim > Web-Frontend > js-Tutorial > Alternative zu AbortController zur Behandlung von Async-Timeouts in JavaScript

Alternative zu AbortController zur Behandlung von Async-Timeouts in JavaScript

Linda Hamilton
Freigeben: 2024-12-07 09:42:12
Original
948 Leute haben es durchsucht

Alternative to AbortController for Handling Async Timeouts in JavaScript

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 ?

Nach dem Login kopieren

Was machen wir genau?

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!

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