Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >Cara mengendalikan acara dalam utas tunggal nodejs
Node.js ialah persekitaran berjalan JavaScript yang ringan berdasarkan model I/O dipacu peristiwa dan tidak menyekat. Walau bagaimanapun, model satu benang Node.js sering menyebabkan pembangun bertanya: Bagaimana untuk mengendalikan acara dalam satu utas?
Untuk menjawab soalan ini dengan lebih baik, mari kita lihat mekanisme gelung peristiwa Node.js dahulu.
Mekanisme gelung peristiwa Node.js
Model utas tunggal Node.js tidak bermakna terdapat hanya satu utas yang dijalankan, sebenarnya, apabila Node.js dimulakan akan dibuat secara automatik A thread utama untuk mengendalikan kod JavaScript. Mekanisme gelung peristiwa Node.js ialah cara urutan ini mengendalikan acara.
Pertama, mari kita lihat aliran asas gelung acara.
Apabila Node.js menerima permintaan atau peristiwa lain berlaku, ia akan melaksanakan kod JavaScript yang sepadan dan meletakkan kod itu ke dalam Tindanan Panggilan (panggilan timbunan). Setiap kali fungsi dilaksanakan, bingkai yang sepadan ditambah ke bahagian atas timbunan panggilan.
Jika acara dicetuskan semasa pelaksanaan fungsi dan membawa fungsi panggil balik yang sepadan, maka fungsi panggil balik ini akan ditambah pada Jadual Acara . Jadual Acara ialah senarai yang mengekalkan surat-menyurat antara acara dan fungsi panggil balik yang sepadan.
Apabila kod dalam tindanan panggilan dilaksanakan, Node.js akan memasuki peringkat gelung peristiwa (Gelung Acara). Fungsi tinjauan acara adalah untuk mencari sama ada peristiwa berlaku dalam Jadual Acara Jika ya, keluarkan fungsi panggil balik yang sepadan dan laksanakannya.
Jika pengundian acara menemui fungsi panggil balik yang sepadan dengan acara, fungsi panggil balik akan ditambahkan pada timbunan panggilan dan kod yang sepadan akan menjadi dilaksanakan. Jika peristiwa baharu dicetuskan semasa pelaksanaan fungsi, ia akan kembali ke fasa pengundian acara sekali lagi.
Apabila Node.js mendapati bahawa tiada acara lagi untuk diproses dalam Jadual Acara dan pada masa ini tiada pemasa untuk menunggu, atur cara akan ditutup. Jika tidak, ia akan melompat kembali ke langkah ketiga, mengundi dan menunggu acara baharu berlaku.
Bagaimana untuk mengendalikan acara?
Cara paling asas ialah mengikat acara dan fungsi panggil balik bersama-sama, dan laksanakan fungsi panggil balik yang sepadan apabila peristiwa itu berlaku. Kita boleh melihat contoh mudah:
const EventEmitter = require('events'); const emitter = new EventEmitter(); emitter.on('event1', () => { console.log('event1 occured!'); }) emitter.emit('event1');
Dalam contoh ini, kami mentakrifkan EventEmitter dan mengikat acara 'event1' dan fungsi panggil balik yang sepadan. Apabila kita mencetuskan acara 'event1' melalui emitter.emit('event1'), fungsi panggil balik terikat akan dilaksanakan dan 'event1 occured!'
Satu lagi cara biasa untuk mengendalikan acara ialah menggunakan Promise. Melalui Promise, kami boleh menukar operasi tak segerak dan fungsi panggil balik kepada objek boleh rantai, dan menggunakan kaedah then and catch untuk mengendalikan situasi kejayaan dan kegagalan. Contohnya:
const promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('result'); }, 1000); }); promise.then((result) => { console.log(result); }).catch((error) => { console.error(error); });
Dalam contoh ini, kami mencipta objek Promise, mensimulasikan operasi tak segerak dan memproses hasil operasi tak segerak melalui kaedah kemudian dan tangkap.
Akhir sekali, Node.js turut menyediakan beberapa modul terbina dalam dan API untuk mengendalikan pelbagai acara. Contohnya:
Kesimpulan
Di bawah model satu benang, pemprosesan acara ialah salah satu ciri teras Node.js. Melalui mekanisme gelung peristiwa, Node.js boleh mengendalikan sejumlah besar permintaan serentak dan mencapai pengaturcaraan tak segerak yang cekap. Kami boleh menggunakan fungsi panggil balik, Promise dan modul terbina dalam serta API untuk mengendalikan pelbagai acara bagi melaksanakan pelbagai aplikasi yang kompleks.
Atas ialah kandungan terperinci Cara mengendalikan acara dalam utas tunggal nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!