Callbacks durch Async/Await ersetzen

Ersetzen Sie Callbacks durch async/await, um die Lesbarkeit und Fehlerbehandlung in JavaScript zu verbessern.

Sie können ein Modell direkt abfragen und die zurückgegebenen Ergebnisse testen, wenn Sie verschiedene Parameterwerte mit der Cloud Console oder durch direkten Aufruf der Vertex AI API verwenden.

Freiform-Prompt

Refaktorieren Sie diesen JavaScript-Code so, dass async/await anstelle von Callbacks für die Verarbeitung asynchroner Vorgänge verwendet wird. Ziel ist es, die Lesbarkeit von Code und Fehlerbehandlung zu verbessern.

function fetchData(url, callback) {
  http.get(url, function(response) {
    let data = '';
    response.on('data', (chunk) => {
      data += chunk;
    });
    response.on('end', () => {
      callback(null, data);
    });
  }).on('error', (err) => {
    callback(err);
  });
}

Antwort


async function fetchData(url) {
try {
const response = await new Promise((resolve, reject) => {
http.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
resolve(data);
});
}).on('error', reject);
});
return response;
} catch (error) {
throw error; // Re-throw the error to be handled by the caller
}
}

Erklärung:

  1. async-Funktion: Die fetchData-Funktion wird als async definiert, sodass wir await darin verwenden können.
  2. try...catch-Block: Der asynchrone Vorgang wird in einem try...catch-Block zusammengefasst, um potenzielle Fehler zu beheben.
  3. Promise und await:
  4. Wir erstellen einen Promise, der mit den Daten aufgelöst wird, wenn die Antwort vollständig empfangen wurde.
  5. await wird verwendet, um die Ausführung der Funktion zu unterbrechen, bis Promise aufgelöst ist.
  6. Fehlerbehandlung:
  7. Wenn während der http.get-Anfrage ein Fehler auftritt, wird die reject-Funktion von Promise aufgerufen, wodurch der catch-Block ausgeführt wird.
  8. Wir geben den Fehler mit throw error noch einmal aus, um ihn an den Aufrufer weiterzugeben.
  9. Rückgabewert: Die Funktion fetchData gibt bei Erfolg die abgerufenen Daten zurück.

Verwendung:

async function main() {
try {
const data = await fetchData('https://example.com/data');
console.log(data);
} catch (error) {
console.error('Error fetching data:', error);
}
}

main();

Vorteile von "async/await":

  • Verbesserte Lesbarkeit: Der Code ist prägnanter und einfacher zu verstehen, da der asynchrone Ablauf expliziter ist.
  • Vereinfachte Fehlerbehandlung: Der try...catch-Block bietet eine klare Möglichkeit zur Fehlerbehebung.
  • Kein Callback: Wir vermeiden verschachtelte Callbacks, wodurch der Code besser verwaltbar ist.
  • Besserer Ablaufsteuerung: Die Codeausführung ist vorhersehbarer, da await die Funktion pausiert, bis der asynchrone Vorgang abgeschlossen ist.
Modell: gemini-1.5-flash-001
Temperatur: 1
Max. Ausgabetokens: 8.192
TopK: 40
TopP: 0,95