Asynchronous in Javascript
Asynchronous in Javascript
Pada Javascript dikenal istilah synchronous dan asynchronous, kedua hal ini termasuk materi
belajar javascript yang cukup rumit dan bingung untuk dipelajari.
Sedangkan pada asynchronous, eksekusi baris program berikutnya dapat langsung dijalankan
tanpa harus menunggu eksekusi yang sedang dilakukan selesai.
Pada asynchronous, eksekusi program akan dipindahkan dari call stack dan apabila selesai
akan di pindahkan ke callback quequ¸ setelah seluruh baris program dijalankan makan
javascript akan melakukan event loop untuk memanggil kembali baris program yang bersifat
asynchronous tadi.
console.log(‘Start’);
setTimeout( () => console.log(‘1’), 1000);
console.log(‘Done’);
4. setelah semua baris program dieksekusi, maka javascript akan melakukan event
loop dan memanggil setTimeout( () => console.log(‘1’), 1000); yang telah selesai
dieksekusi dan dipindahkan ke callback quequ.
Ok, sudah sedikit paham tentang synchronous dan asynchronous ?
hallo();
Hal ini merupakan contoh dari synchronous, dimana eksekusi program akan dijalankan secara
sekuensial, berutuan satu persatu. 'console.log' merupkan function dari javascript yang
bertipe synchronous.
hallo();
Pada saat eksekusi, function tiga() dijalankan setelah 'done' selesai, hal ini merupakan contoh
dari asynchronous. setTimeout merupakan function dari javascript yang bertipe
asynchronous. Dimana saat eksekusi baris program javascript akan eksekusi yang bersifat
synchronous terlebih dahulu dan memasukan baris yang bersifat asynchronous ke dalam
callback queue setelah selesai di eksekusi, dan nantinya akan dipanggil kembali oleh event
loop untuk dipanggil kembali ke call stack. untuk lebih jelas dapat melihat link video tentang
event loop pada referensi di bawah.
hallo();
Pada saat eksekusi, function tiga() dan function empat() dijalanjan setelah 'done' selesai.
Dan function empat() lebih dulu di eksekusi dari pada function tiga(), padahal secara baris
program function tiga() berada diatas function empat(). function tiga() dijalankan setelah
'done' karena fetch juga merupakan fungsi asynchronous dari javascript. Dan kenapa lebih
dulu dieksekusi, karena waktu eksekusi dari function empat() lebih cepat dari function tiga()
karena dalam function tiga() console.log('3') akan dieksekusi setelah 2 detik.
hallo();
Pada saat eksekusi, function tiga() telah dijalankan sesuai dengan urutannya. Hal ini terjadi
dengan bantuan dari promise. Dimana kita membuat isi dari function tiga() menjadi promise
kemudian saat di dalam function hallo(), function tiga() dipanggil dengan '.then' dan function
empat() dan console.log('Done') diletakan didalam '.then' tersebut. Tetapi function empat()
tetap dijalankan setelah 'Done' selesai.
const satu = () => { Output :
console.log('1');
}
Start
const dua = () => { 1
console.log('2'); 2
} 3
return API
const tiga = () => (new Promise( (resolve) => {
setTimeout( () => {
Done
console.log('3');
resolve(true);
} , 2000);
} ))
hallo();
pada tahap ini, seluruh blok koding kita telah berjalan sesuai dengan seharusnya yaitu dengan
secara sekuensial. Kenapa pada function empat() tidak terdapat promise sedangkan di dalam
function hallo() kita memanggilnya dengan '.then', karena memang pada dasarnya fetch itu
merupakan function dari javascript yang sudah berbentuk promise. Jadi kita tidak perlu lagi
mengubahnya menjadi promise.
a.then(
b.then(
c.then(
d.then();
);
);
);
Oleh karena itu kita dapat menggunakan async/await pada kodingan kita.
hallo();
dan agar lebih mudah di-handle bila ada error kita dapat menggunakan try catch, seperti
berikut,
Bagaimana ?
Cukup membingungkan awalnya, tetapi setelah kita tahu konsepnya, kita akan dengan mudah
mempelajari asynchronous di dalam javascript. Banyak function dari javascript yang bersifat
promise, seperti baca/tulis file, pemanggilan API, baca/tulis database.
--------------------------------------------------------------------------------------------------------------------------
Referensi :
Fetch : https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Arrow Functions :
https://developer.mozilla.org/id/docs/Web/JavaScript/Reference/Functions/Arrow_functio
ns
Event Loop : https://www.youtube.com/watch?v=8aGhZQkoFbQ
Fake API : https://jsonplaceholder.typicode.com/
async/await : https://medium.com/coderupa/panduan-komplit-asynchronous-
programming-pada-javascript-part-4-async-await-fc504c344238
promise : https://medium.com/coderupa/panduan-komplit-asynchronous-programming-
pada-javascript-part-3-promise-819ce5d8b3c