Mengendalikan Peristiwa dan Asynchronicity dalam Node.js

Dalam proses membangunkan aplikasi Node.js, memahami dan bekerja dengan pengendalian acara dan pemprosesan tak segerak adalah penting. Node.js dibina pada model dipacu peristiwa dan tak segerak, membolehkan tugasan dilaksanakan tanpa menunggu selesai. Malah, memahami dan menggunakan pengendalian peristiwa dan pemprosesan tak segerak dengan betul adalah bahagian penting dalam mengoptimumkan prestasi aplikasi.

 

Acara dan panggil balik dalam Node.js

Dalam Node.js, acara dan panggil balik memainkan peranan penting dalam mengendalikan operasi tak segerak. Peristiwa ialah cara untuk mengendalikan dan bertindak balas terhadap tindakan atau kejadian tertentu yang berlaku dalam aplikasi. Panggilan balik, sebaliknya, adalah fungsi yang dilaksanakan sebaik sahaja acara atau operasi tertentu selesai.

Node.js menyediakan seni bina dipacu peristiwa di mana bahagian aplikasi yang berlainan boleh memancarkan peristiwa dan mendengarnya. Ini membolehkan pemprosesan berbilang operasi yang cekap dan tidak menyekat secara serentak.

Panggilan balik biasanya digunakan dalam Node.js untuk mengendalikan operasi tak segerak. Mereka diluluskan sebagai hujah kepada fungsi dan dilaksanakan sebaik sahaja operasi selesai. Panggilan balik menyediakan cara untuk mengendalikan hasil atau ralat yang berlaku semasa tugasan tak segerak.

Berikut ialah contoh menggunakan panggilan balik dalam Node.js:

// A function that takes a callback
function fetchData(callback) {
  // Simulate fetching data from an asynchronous operation
  setTimeout(() => {
    const data = { name: 'John', age: 30 };
    callback(null, data); // Pass the data to the callback
  }, 2000); // Simulate a 2-second delay
}

// Call the fetchData function and provide a callback
fetchData((error, data) => {
  if (error) {
    console.error('Error:', error);
  } else {
    console.log('Data:', data);
  }
});

Dalam contoh ini, kami mempunyai fungsi yang dipanggil fetchDatayang mensimulasikan pengambilan data daripada operasi tak segerak (cth, membuat panggilan API atau menanyakan pangkalan data). Ia memerlukan fungsi panggil balik sebagai hujah.

Di dalam fetchDatafungsi, kami gunakan setTimeoutuntuk mensimulasikan operasi tak segerak. Selepas kelewatan 2 saat, kami mencipta beberapa data sampel dan menyerahkannya kepada fungsi panggil balik bersama-sama dengan ralat (yang ditetapkan kepada nulldalam kes ini).

Di luar fetchDatafungsi, kami memanggilnya dan menyediakan fungsi panggil balik. Dalam panggilan balik, kami mengendalikan sebarang kemungkinan ralat dan memproses data yang diterima. Jika terdapat ralat, kami log masuk ke konsol. Jika tidak, kami log data.

Ini ialah contoh asas menggunakan panggilan balik dalam Node.js untuk mengendalikan operasi tak segerak dan memastikan data diproses sebaik sahaja ia tersedia. Dalam senario dunia sebenar, panggil balik biasanya digunakan untuk mengendalikan pertanyaan pangkalan data, permintaan API dan tugas tak segerak yang lain.

 

Menggunakan Janji dan async/menunggu untuk mengendalikan ketidaksegerakan

"Menggunakan Promise dan async/wait to handle asynchronous operations" ialah pendekatan biasa dalam Node.js untuk mengendalikan tugas asynchronous dengan cara yang mudah dan cekap. Promise ialah objek JavaScript yang membantu kami mengurus dan mengendalikan operasi tak segerak, manakala async/wait ialah sintaks yang membolehkan kami menulis kod tak segerak dengan cara yang sama dengan kod segerak.

Dengan menggunakan Promise dan async/wait, kita boleh menulis kod tak segerak dengan lebih mudah dan intuitif. Kami tidak perlu lagi menggunakan fungsi panggil balik dan berurusan dengan neraka panggil balik (fungsi panggil balik bersarang) untuk mengendalikan operasi tak segerak. Sebaliknya, kita boleh menggunakan kata kunci tunggu untuk menunggu Janji dilengkapkan dan mengembalikan hasilnya.

Berikut ialah contoh penggunaan Promise dan async/waiit dalam Node.js untuk mengendalikan operasi tak segerak:

// A mock function to fetch data from an API
function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const data = { name: 'John', age: 30 };
      resolve(data); // Return data within the Promise
    }, 2000);
  });
}

// Using async/await to handle asynchronous operations
async function getData() {
  try {
    const data = await fetchData(); // Wait for the Promise to complete and return the data
    console.log('Data:', data);
  } catch (error) {
    console.error('Error:', error);
  }
}

// Call the getData function
getData();

Dalam contoh ini, kami menggunakan fetchDatafungsi untuk mensimulasikan pengambilan data daripada API (atau sebarang operasi tak segerak). Fungsi ini mengembalikan Janji, di mana kami memanggil resolvefungsi untuk mengembalikan data.

Di luar fetchDatafungsi, kami menggunakan try/catchblok untuk menangani ralat. Dalam getDatafungsi tersebut, kami menggunakan awaitkata kunci untuk menunggu Janji melengkapkan dan mengembalikan data. Jika terdapat ralat dalam Janji, ia akan membuang pengecualian dan kami mengendalikannya dalam catchblok.

Akhir sekali, kami memanggil getDatafungsi untuk memulakan pemprosesan tak segerak. Hasilnya akan dilog masuk ke konsol selepas Janji selesai dan mengembalikan data.

Menggunakan Promise dan async/wait menjadikan kod kami lebih mudah dibaca dan lebih mudah difahami apabila berurusan dengan operasi tak segerak. Ia membantu kami mengelakkan panggilan balik neraka dan membolehkan kami menulis kod secara berurutan, sama seperti menulis kod segerak.

 

Kesimpulan: Pengendalian acara dan pemprosesan tak segerak ialah dua aspek penting dalam pembangunan aplikasi Node.js. Dengan memahami dan menggunakan konsep dan alatan yang berkaitan dengan betul, anda boleh membina aplikasi yang cekap, fleksibel dan boleh dipercayai pada platform Node.js.