Heim > Web-Frontend > js-Tutorial > Wie kann ich eine Callback-Funktion mit async/await in JavaScript in ein Promise umwandeln?

Wie kann ich eine Callback-Funktion mit async/await in JavaScript in ein Promise umwandeln?

Mary-Kate Olsen
Freigeben: 2024-11-02 04:04:30
Original
675 Leute haben es durchsucht

How can I convert a callback function to a Promise using async/await in JavaScript?

Konvertieren einer Callback-Funktion in Promise mit async/await

In JavaScript ist die Möglichkeit, die Ausführung von Code zu verzögern, bis bestimmte Ereignisse eintreten, eine häufige Anforderung. Bei der Arbeit mit asynchronem Code sind Rückrufe der traditionelle Ansatz in JavaScript, aber Versprechen bieten eine präzisere und flexiblere Möglichkeit, asynchrone Vorgänge zu handhaben. Versprechen machen es möglich, Vorgänge zu verketten und abzuwarten, wodurch asynchroner Code vereinfacht und die Lesbarkeit verbessert wird.

Problem

Betrachten Sie die folgende Funktion, die ein Bild von einer URL abruft, es lädt und seine Breite und zurückgibt height:

<code class="js">function getImageData(url) {
  const img = new Image();
  img.addEventListener('load', function () {
    return { width: this.naturalWidth, height: this.naturalHeight };
  });
  img.src = url;
}</code>
Nach dem Login kopieren

Bei Verwendung dieser Funktion als Rückruf können beim Versuch, sofort auf die Bilddaten zuzugreifen, Probleme auftreten. Wenn wir die Funktion beispielsweise wie folgt verwenden:

<code class="js">ready() {
  console.log(getImageData(this.url));
}</code>
Nach dem Login kopieren

Die Funktion getImageData wird sofort ausgeführt, aber das Bild wurde möglicherweise noch nicht vollständig geladen, was zu einer undefinierten Ausgabe führt. Um dieses Problem zu lösen, können wir Versprechen und Async/Await nutzen, um sicherzustellen, dass die Bilddaten erst abgerufen werden, nachdem das Bild erfolgreich geladen wurde.

Lösung

Anstatt uns auf Rückrufe zu verlassen, können wir dies tun getImageData in eine auf Versprechen basierende Funktion umwandeln:

<code class="js">function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener('load', () => resolve(img));
    img.addEventListener('error', reject); // Don't forget to handle errors
    img.src = url;
  });
}</code>
Nach dem Login kopieren

Jetzt können wir async/await verwenden, um die Bilddaten nur dann abzurufen, wenn sie verfügbar sind:

<code class="js">async function getImageData(url) {
  const img = await loadImage(url);
  return { width: img.naturalWidth, height: img.naturalHeight };
}
async function ready() {
  console.log(await getImageData(this.url));
}</code>
Nach dem Login kopieren

Durch die Verwendung von Versprechen und async/await können wir sicherstellen, dass die Bilddaten erst zugänglich sind, nachdem das Bild geladen wurde, was einen robusteren und saubereren Ansatz für die Handhabung asynchroner Vorgänge bietet.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Callback-Funktion mit async/await in JavaScript in ein Promise umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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