Halo, selamat datang kembali di Ruang Developer Blog. Pada postingan kali ini kita akan mengenal apa itu Synchronous dan Asynchronous pada Javascript. Show
Synchronous pada JavascriptSynchronous berarti sequence atau berurut. Pada konsep ini, setiap statement kode dieksekusi baris per baris. Artinya, sebuah statement harus menunggu statement sebelumnya selesai dieksekusi. Untuk lebih jelasnya, perhatikan contoh kode berikut.
Output:
Pada contoh kode di atas, baris kode pertama akan dieksekusi setelah itu barulah baris berikutnya. Seperti yang bisa kita lihat, proses eksekusi baris dilakukan secara berurutan. Setiap baris kode harus menunggu baris kode sebelumnya selesai dieksekusi. Sehingga, yang tampil adalah tesk Halo, setelah itu Welcome to Ruang Developer. Asynchronous pada JavascriptAsyncrhonous merupakan kebalikan dari proses syncrhonous. Jika synchronous akan memblok proses eksekusi karena menunggu baris sebelumnya selesai, pada konsep asynchronous, baris kode dapat dieksekusi segera meskipun baris kode sebelumnya belum selesai dieksekusi. Untuk lebih jelasnya, perhatikan contoh kode berikut ini.
Output:
Pada awalnya, seperti biasa, baris Halo akan dieksekusi. Saat dijalankan di browser, ada API web yang menangani fungsi setTimeout. Kemudian, program terus dijalankan seperti biasa hingga saat mencapai waktu 2 detik, baris Hello World akan dieksekusi. Tidak ada proses blok yang mengharuskan fungsi setTimeout selesai, sehingga baris terakhir langsung dijalankan. Seperti itulah yang terjadi pada proses asynchronous. , proses runtime akan terblokade hingga pekerjaan tersebut selesai dijalankan. Yang paling menakutkan adalah pengguna akan terganggu dengan adanya blocking tersebut.bad user experience Jika dari segi UX saja sudah buruk, lantas siapa yang mau akses website kita dengan cara tersebut? Untuk mengatasinya, kita harus melakukan pekerjaan tersebut secara asynchronous. Kode yang dituliskan secara asynchronous akan dieksekusi di belakang thread utama atau biasa disebut main thread. Hal tersebut tidak akan membloking proses runtime atau menunggu hingga proses selesai dilakukan. Sembari menunggu proses tersebut selesai, compiler akan mengeksekusi perintah kode selanjutnya. Pada Javascript, Asynchronous JavaScript and XMLHTTP atau biasa disebut AJAX merupakan salah satu konsep yang menerapkan metode asynchronous dalam menjalankan pekerjaannya. Biasa nya AJAX digunakan untuk melakukan permintaan data (request) dan menangani sebuah tanggapan (handling response), baik response dalam bentuk XML, Javascript ataupun JSON dari sebuah Rest API. Asynchronous Request Javascript Pada artikel kali ini, kita akan berkenalan dengan beberapa fungsi AJAX request. Yang pertama menggunakan XHR. Yang kedua, menggunakan JQuery. Dan yang ketiga menggunakan metode terbaru yang tentu paling disarankan saat ini yaitu dengan fungsi Fetch.
AJAX dengan menggunakan XHRXMLHTTPRequest (atau disingkat XHR) merupakan salah satu teknik dalam membuat AJAX request. XHR yang tersedia secara native pada Javascript merupakan sesuatu keunggulan, tetapi untuk menggunakan XHR secara murni, banyak langkahnya. Apa pasal? Rupanya karena kita membuat sebuah fungsi AJAX secara manual. Penasaran? Mari kita coba. Silakan buka repository yang sudah kalian clone, dan pastikan kamu berada pada branch master. Sebagai langkah awal, buatlah sebuah objek dari XMLHTTPRequest. 1 const asyncRequestObject = new XMLHttpRequest();
1 asyncRequestObject.open('GET', BASE_URL + teamName);
1 2 3 4 5 6 7 8 asyncRequestObject.onload = function handleSuccess() { const data = JSON.parse(this.responseText); showTeam(data) };
asyncRequestObject.onerror = function handleError() { console.log('Ups, Failed to load data :(') };
1 xhr.send();
1 2 3 4 5 6 7 8 9 10 11 12 13 function getTeam(teamName) { content.innerHTML = progressBar; const asyncRequestObject = new XMLHttpRequest(); asyncRequestObject.open('GET', BASE_URL + teamName); asyncRequestObject.onload = function handleSuccess() { const data = JSON.parse(this.responseText); showTeam(data) }; asyncRequestObject.onerror = function handleError() { console.log('Ups, Failed to load data :(') }; asyncRequestObject.send() }
AJAX dengan menggunakan JQueryJika kamu merasa langkah sebelumnya kurang praktis, dengan bantuan library JQuery beberapa langkah tersebut sudah tak lagi diperlukan. Pada dasarnya, Fungsi AJAX menggunakan JQuery sama halnya dengan menggunakan XHR, tetapi kita tidak perlu membuat instance objek dari XMLHTTPRequest. Hanya saja untuk menggunakannya, tentu kita perlu menambahkan library JQuery pada project kita. Untuk latihan kali ini, cukup tambahkan tag script berikut di akhir tag <body> pada index.html. JavaScript1 2 3 <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
Mari kita ubah kode pada fungsi getTeam menggunakan AJAX JQuery seperti berikut: 1 2 3 4 5 6 7 8 function getTeam(teamName) { content.innerHTML = progressBar; $.ajax({ url: BASE_URL + teamName }).done(showTeam).fail(function (err) { console.log(err) }) }
AJAX dengan menggunakan Fetch APIFungsi yang ketiga ini merupakan gabungan XHR dan JQuery. Apa sih maksudnya? Fetch API ini merupakan fungsi native yang tersedia pada Javascript dan tidak kalah praktis seperti JQuery saat menggunakannya. Fetch merupakan cara baru dalam melakukan network request. Pada dasarnya fungsi fetch memanfaatkan sebuah Promise, sehingga untuk menggunakan nya pastikan browser sudah mendukung ECMAScript 6 atau biasa disebut ES6. Good news! Karena kebanyakan browser sekarang sudah mendukung ES6 ini. Atau kamu dapat menggunakan teknik polyfill untuk browser yang belum mendukung ES6. Untuk menggunakan fetch, cukup gunakan keyword fetch() kemudian tuliskan URL yang akan dituju di dalam tanda kurung tersebut. 1 fetch('<URL-to-the-resource-that-is-being-requested>');
1 2 3 4 5 6 7 fetch('<URL-to-the-resource-that-is-being-requested>') .then(function (response) { return response.json() }) .catch(function (err) { console.log(`Ups, ${err} :(`) }) Dari kode diatas dapat disimpulkan seperti ini. Jika request pada fetch berhasil dilakukan, maka blok then akan terpanggil dan mengembalikan nilai objek sesuai response yang didapat. Apabila fungsi fetch gagal dilakukan, maka blok catch akan terpanggil dan menampilkan eror pada console. Kemudian untuk mengambil nilai objek yang dikembalikan pada blok then, kita dapat memanggil kembali fungsi then setelah pemanggilan fungsi catch. Perhatikan kode di bawah ini: JavaScript1 2 3 4 5 6 7 8 9 10 fetch('<URL-to-the-resource-that-is-being-requested>') .then(function (response) { return response.json() }) .catch(function (err) { console.log(`Ups, ${err} :(`) }) .then(function (data) { // variabel ${data} siap digunakan! })
Kemudian jika kita terapkan fetch pada fungsi getTeam, maka kode pada fungsi tersebut akan menjadi seperti ini: JavaScript1 2 3 4 5 6 7 8 9 10 11 function getTeam(teamName) { content.innerHTML = progressBar; fetch(BASE_URL + teamName) .then(function (response) { return response.json() }) .catch(function (err) { console.log(`Ups, ${err} :(`) }) .then(showTeam) } KesimpulanSetelah coba menerapkan AJAX dengan metode berbeda-beda, apa metode terfavoritmu kini? Tulis di kolom komentar berikut alasannya ya. Sebagai bahan komparasi, masing-masing metode sudah didokumentasikan melalui branch pada repository yang kamu clone sebelumnya. Selamat mencoba! Kelas terkait:Materi artikel ini dapat kamu gali lebih dalam di kelas Membangun Progressive Web Apps. Klik di sini untuk detailnya. Apa itu synchronous dan asynchronous pada JavaScript?Asynchronous adalah proses jalannya program bisa dilakukan secara bersamaan tanpa harus menunggu proses antrian. Synchronous merupakan bagian dari Asynchronous (1 antrian) dimana proses akan dieksekusi secara bersamaan dan untuk hasil tergantung lama proses suatu fungsi synchronous .
Apakah asynchronous dalam JavaScript?Jawabannya adalah JavaScript melakukannya secara asynchronous. Pada konsep asynchronous, code akan dieksekusi tanpa menunggu eksekusi code lain selesai sehingga seakan-akan dieksekusi secara bersamaan. setTimeout pada code di atas membuat kata the time has come akan ditampilkan setelah 3 detik.
Apa perbedaan dari asynchronous dan synchronous?Synchronous adalah pembelajaran yang berpedoman pada jadwal atau kerangka waktu pelajaran. Peserta didik dapat mengakses materi maupun tugas dalam kurun waktu tertentu. Sedangkan asynchronous memiliki waktu yang lebih fleksibel.
Apakah Node JS asynchronous?Asynchronous & Event-driven
Semua API dari Node.js bersifat asynchronous, artinya tidak memblokir proses lain sembari menunggu satu proses selesai. Server Node.js akan melanjutkan ke ke pemanggilan API berikutnya lalu memanfaatkan mekanisme event notification untuk mendapatkan respon dari panggilan API sebelumnya.
|