Rumah > Artikel > hujung hadapan web > Bagaimanakah JavaScript Sebenarnya Membuat Panggilan Balik Asynchronous?
Dalam bidang pengaturcaraan, panggilan balik memegang peranan penting dalam pelaksanaan tak segerak. Walaupun telah difahami secara meluas bahawa panggilan balik beroperasi secara tidak segerak, mekanisme asas di sebalik tingkah laku ini masih tidak pasti bagi ramai. Artikel ini akan menyelidiki butiran sintaks dan pelaksanaan yang membolehkan pelaksanaan tak segerak dalam pengaturcaraan berasaskan panggilan balik.
Bertentangan dengan kepercayaan popular , tiada unsur sintaksis khusus yang menentukan sama ada fungsi akan dilaksanakan secara tak segerak atau serentak. Panggilan balik boleh berfungsi dalam mana-mana mod, seperti yang ditunjukkan oleh kes berikut:
Asynchronous:
setTimeout(function(){ console.log("this is async"); }, 100);
Synchronous:
an_array.forEach(function(x){ console.log("this is sync"); });
JavaScript sendiri tidak mempunyai sebarang mekanisme yang wujud untuk pelaksanaan tak segerak bagi fungsi. Untuk mencapai tingkah laku ini, satu daripada dua pendekatan boleh diambil:
Fungsi berkod C, seperti setTimeout, bergantung pada teknik canggih untuk memudahkan pelaksanaan tak segerak. Mekanisme utama yang terlibat ialah gelung peristiwa.
Di teras setiap pelayar web terletak gelung acara, sisa protokol rangkaian tak segerak yang muncul pada zaman awal internet. Mekanisme ini membenarkan penyemak imbas menyulap berbilang permintaan I/O secara serentak tanpa menggunakan urutan tambahan.
Gelung peristiwa bergantung pada panggilan sistem penting dalam C yang dikenali sebagai select() (atau varian serupa):
select (max, readlist, writelist, errlist, timeout)
select() membolehkan sistem memantau banyak operasi I/O secara serentak. Apabila data tersedia pada mana-mana saluran I/O yang dipilih, fungsi itu kembali, memberi isyarat kepada penyemak imbas untuk memulakan pelaksanaan panggilan balik yang sesuai.
Apabila fungsi panggil balik didaftarkan, penterjemah JavaScript menyimpannya dan secara serentak menggunakan fungsi pilih(). Selepas pemulangannya, jurubahasa mengaitkan panggilan balik dengan saluran I/O tertentu dan mencetuskan pelaksanaannya.
select() juga memberi kuasa kepada penyemak imbas untuk mengawal masa panggilan balik melalui tamat masa. Dengan mengawal selia dengan teliti hujah tamat masa yang diluluskan kepada select(), panggilan balik boleh dijadualkan untuk pelaksanaan pada selang masa yang telah ditetapkan. Ini membentuk asas untuk fungsi seperti setTimeout dan setInterval.
Selain daripada gelung acara, penyemak imbas web menggunakan pekerja web untuk memudahkan pelaksanaan tak segerak kod JavaScript dalam urutan berasingan. Walau bagaimanapun, pekerja ini masih mesti saling berhubung dengan gelung acara utama melalui select() untuk berkomunikasi kembali ke urutan utama.
Node.js, seperti penyemak imbas web, memanfaatkan threading untuk operasi I/O fail/cakera. Setelah menyelesaikan tugasan ini, urutan berkomunikasi dengan gelung peristiwa Node.js, mendorong pelaksanaan panggilan balik yang berkaitan.
Konsep tak segerak pelaksanaan dalam pengaturcaraan berasaskan panggilan balik tidak dapat dilihat secara langsung daripada sintaks itu sendiri. Ia adalah hasil daripada mekanisme asas, terutamanya gelung peristiwa dan interaksinya dengan fungsi peringkat C seperti select(). Gelung peristiwa membolehkan penyemak imbas mengendalikan berbilang operasi I/O secara serentak, memastikan pelaksanaan panggilan balik tanpa sekatan. Memahami prinsip ini adalah penting untuk memahami selok-belok pengaturcaraan tak segerak dan aplikasinya merentas pelbagai platform.
Atas ialah kandungan terperinci Bagaimanakah JavaScript Sebenarnya Membuat Panggilan Balik Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!