Dasar – Dasar Pemrograman Asinkron di Node.js (Bagian -1)
Jika pernah membaca tutorial atau artikel tentang Node.js, mungkin pembaca sering menemui banyak istilah seperti asynchronous, non-blocking, event-based dan single-threaded. Semua istilah itu akurat untuk menggambarkan Node. Namun semua istilah tersebut sangatlah abstrak terutama bagi mereka yang baru mempelajari Node.js
Salah satu hal yang membedakan dengan bahasa pemrograman lain ialah bahwa Nodejs dibuat dengan salah satu prinsip yang bernama asynchronous, yang berarti aplikasi, akan tetap melanjutkan eksekusi ke statement berikutnya, meskipun statement sebelumnya belum selesei dieksekusi. Hal ini akan terasa aneh terlebih bagi mereka yang terbiasa melakukan pemrograman secara sekuensial (synchronous)
Misalkan buat sebuah file bernama async-dasar.js lalu tulis program berikut
console.log('mulai'); console.log('selesei');
Program tersebut sangat sederhana, saat program dijalankan ia akan menampilkan tulisan di layar: “mulai” baru kemudian “selesei” di baris berikutnya. Program tersebut berjalan secara sinkron.
Lalu bagaimana jika program berjalan asinkron? Satu statement setTimeout
, yang menggunakan fungsi arrow =>
sebagai argumen pertama akan disisipkan di dalam program. Argumen pertama ini biasa disebut fungsi callback yang akan dieksekusi ketika waktu yang ditentukan pada argumen kedua telah tercapai. Pattern callback adalah salah satu pattern di dalam pemrograman Node.js yang penting untuk diketahui, karena hal tersebut terkait dengan pemrograman asynchronous. Penulis akan bahas ini di kesempatan lain.
console.log('mulai'); setTimeout(() => { console.log('di dalam callback'); }, 2000); console.log('selesei');
Jika program berjalan secara sinkron, maka ketika mencapai statement di baris kedua, runtime akan menunggu hingga statement tersebut selesei dieksekusi lalu kemudian berpindah ke baris kelima. Sehingga ekspetasinya program akan menampilkan nilai seperti berikut
namun ternyata tidak demikian, alih – alih program akan menampilkan di layar seperti berikut
Hal itu berarti program berjalan secara asyncronous alias non-blocking, dimana node.js runtime tidak perlu menunggu 2 detik (2000 ms) terlebih dahulu di baris 2, node.js hanya mendaftarkan fungsi callback dipanggil di 2 detik kemudian, untuk kemudian langsung melanjutkan eksekusi ke baris 5. fungsi Callback akan terpicu kondisi waktu 2 detik tercapai
Statement setTimeout
tersebut sebenarnya hanyalah simulasi untuk mengilustrasikan bagaimana proses asynchronous bekerja. Di dalam dunia nyata, statement setTimeout
tersebut bisa saja sebuah fungsi yang memerlukan waktu dalam eksekusinya, misalnya query ke database, komputasi, ataupun memanggil API lain.