Mengganti Callback dengan Async/Await

Ganti callback dengan async/await untuk keterbacaan dan penanganan error yang lebih baik di JavaScript.

Anda dapat membuat kueri model secara langsung dan menguji hasil yang ditampilkan saat menggunakan parameter value yang berbeda dengan Konsol Cloud, atau dengan memanggil Vertex AI API secara langsung.

Perintah Freeform

Faktorkan ulang kode JavaScript ini untuk menggunakan async/await, bukan callback untuk menangani operasi asinkron. Tujuannya adalah untuk meningkatkan keterbacaan kode dan penanganan error.

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);
  });
}

Respons


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
}
}

Penjelasan:

  1. Fungsi async: Kita menentukan fungsi fetchData sebagai async, yang memungkinkan kita menggunakan await di dalamnya.
  2. Blok try...catch: Kita menggabungkan operasi asinkron dalam blok try...catch untuk menangani potensi error.
  3. Promise dan await:
  4. Kita membuat Promise yang di-resolve dengan data saat respons diterima sepenuhnya.
  5. Kita menggunakan await untuk menjeda eksekusi fungsi hingga Promise di-resolve.
  6. Penanganan Error:
  7. Jika terjadi error selama permintaan http.get, fungsi reject dari Promise akan dipanggil, sehingga menyebabkan blok catch dieksekusi.
  8. Kami menampilkan kembali error menggunakan throw error untuk menyebarkannya ke pemanggil.
  9. Nilai hasil: Fungsi fetchData akan menampilkan data yang diambil jika berhasil.

Penggunaan:

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

main();

Manfaat menggunakan async/await:

  • Keterbacaan yang lebih baik: Kode lebih ringkas dan lebih mudah dipahami, karena alur asinkron lebih eksplisit.
  • Penanganan error yang disederhanakan: Blok try...catch memberikan cara yang jelas untuk menangani error.
  • No callback hell: Kita menghindari callback bertingkat, sehingga kode lebih mudah dikelola.
  • Alur kontrol yang lebih baik: Eksekusi kode lebih dapat diprediksi karena await menjeda fungsi hingga operasi asinkron selesai.
Model: gemini-1.5-flash-001
Suhu: 1
Token output maks: 8192
TopK: 40
TopP: 0,95