Pilih postingan berikutnya atau sebutkan apa yang ingin Anda lihat selanjutnya di sini:



Jika Anda sedang belajar atau pemula dalam JavaScript, saya dapat mengatakan bahwa Anda mungkin berpikir,

“Bagaimana saya bisa menulis fungsi non-pemblokiran asinkron!?”

Ini adalah pertanyaan umum atau lebih seperti rasa ingin tahu ketika kita pertama kali melihat beberapa modul node.js bawaan seperti file system dll.

Eksekusi asinkron adalah salah satu keuntungan menggunakan JavaScript. Karena untuk mencapai eksekusi asinkron di Java, C, dll., kita perlu menggunakan Threads dan percayalah, ini menyusahkan ____.

Namun dalam JavaScript, kita tidak harus berurusan dengan Thread secara eksplisit! JavaScript cukup baik untuk mengurusnya😇.

Jika Anda tidak tahu apa itu asynchronous… Anda dapat membaca WTF itu Sinkron dan Asinkron!

Lanjutkan…. Saya akan menunggu disini.

Oke. Sekarang setelah Anda mengetahui apa itu eksekusi sinkron dan asinkron, mari masuk ke JavaScript!

Fungsi Sinkron:

Dalam kasus sinkron, setiap pernyataan selesai sebelum pernyataan berikutnya dijalankan. Dalam hal ini program dievaluasi secara tepat sesuai urutan pernyataannya.

Ini mencetak:

started
3
5
7
..
..
..
completed 1228
finished

Threading Tunggal:

JavaScript adalah lingkungan thread tunggal! Bahkan node.js

Dalam lingkungan single-thread, hanya satu bagian kode yang dapat dijalankan pada satu waktu.

Perhatikan contoh berikut:

Meskipun kedua pengendali kejadian berjalan pada peristiwa klik, pengendali kedua tidak akan berjalan sampai Anda memberikan nama Anda pada prompt dan pengendali pertama telah selesai.

Selain itu, browser tidak akan merespons peristiwa apa pun saat menyelesaikan penanganan pertama. Lagipula, Javes(👮🏻‍♂️) tidak bisa menjawab telepon saat dia membuka pintu.

Tugas seperti ini yang menyita perhatian penuh Javes disebut pemblokiran atau sinkron.

Fungsi Asinkron

Fungsi sinkron umumnya bukan masalah besar karena kita memiliki komputer yang cepat, dan sebagian besar pengendali kejadian dijalankan secara instan.

Namun apa jadinya bila Anda membutuhkan lebih banyak waktu? Misalnya, Anda mungkin perlu menanyakan data pada server pihak ketiga, atau melakukan panggilan API. Dengan kata lain, kirim Javes ke kantor pos untuk mengirim telegram dan mendapat balasan.

Mengunci browser sementara kita menunggu panggilan selesai sama seperti menyuruh Javes menunggu di kantor pos untuk mendapatkan balasan setiap telegram yang dikirimnya. Kita tidak bisa mendapatkan hal itu, lagipula dia punya pekerjaan yang harus diselesaikan!

Di sinilah fungsi asinkron berperan: sedangkan tugas sinkron akan menempati Javes terus-menerus hingga selesai, tugas asinkron dapat dimulai dan kemudian dikesampingkan hingga nanti sementara valet kita memulai tugas berikutnya dalam daftar tugasnya.

Anda dapat menganggapnya sebagai Javes yang meminta kantor pos untuk meneleponnya kembali ketika balasannya tiba, dan pada saat itu Javes dapat berjalan kembali ke sana dan mengambil surat.

Kami menggunakan setTimeout( function(){} , 0 ); untuk membuat fungsi asinkron di JavaScript!

Ini mencetak:

started
finished
3
5
7
..
..
..
completed 1228

Perputaran Peristiwa

Jadi bagaimana Javes melacak tugas mana yang harus dikerjakan selanjutnya? Dalam JavaScript, daftar tugas Javes disebut event loop.

Hanya ada satu masalah: Javes hanya bisa menangani satu tugas dalam satu waktu, jadi bagaimana dia akan menjawab panggilan telepon kantor pos jika dia sudah sibuk memoles peralatan makannya?

Tidak ada dua cara untuk mengatasinya: kita perlu menyewa seorang sekretaris untuk membantu mengelola daftar tugas Javes dan terus memperbaruinya saat ada tugas baru.

Ternyata hal ini juga terjadi pada JavaScript: mesin JavaScript sebenarnya menggunakan thread latar belakang tambahan yang menangani pengelolaan loop peristiwa.

Namun, kode Anda sendiri akan selalu berjalan di satu thread utama. Jadi dari sudut pandang programmer, dapat dikatakan bahwa JavaScript adalah single-threaded.

Punya keraguan/pertanyaan/saran? Beri komentar di bawah.