Rumah > Artikel > hujung hadapan web > Apakah perbezaan antara penyegerakan nod dan asynchronousness?
Perbezaan antara penyegerakan nod dan asynchronous ialah: penyegerakan bermakna program berjalan dari atas ke bawah Langkah seterusnya hanya boleh dilaksanakan selepas langkah sebelumnya dilaksanakan bermakna anda tidak perlu menunggu di atas untuk menyelesaikan berjalan sebelum menjalankan Operasi berikut, pengaturcaraan tak segerak boleh dilaksanakan dengan bergantung pada panggilan balik, tetapi ini tidak bermakna program selepas panggilan balik adalah tak segerak.
Persekitaran pengendalian tutorial ini: sistem Windows 10, nodejs versi 12.19.0, komputer Dell G3.
Penyegerakan bermaksud program berjalan dari atas ke bawah, manakala tak segerak bermakna anda tidak perlu menunggu? supaya perkara di atas selesai dijalankan sebelum menjalankan operasi berikut. Pengaturcaraan tak segerak bergantung pada panggilan balik, tetapi tidak boleh dikatakan bahawa program menjadi tak segerak selepas menggunakan panggilan balik.
Bahasa Inggeris Segerak: penyegerakan (penyegerakan)
Bahasa Inggeris Tak Segerak: tak segerak (tak segerak)
API Segerak: Hanya selepas pelaksanaan API semasa selesai, pelaksanaan boleh diteruskan API Seterusnya
console.log('before'); console.log('after');
API Asynchronous: Pelaksanaan API semasa tidak akan menyekat pelaksanaan kod berikutnya
console.log('before'); setTimeout( () => { console.log('last'); }, 2000); console.log('after');
API segerak, asynchronous Perbezaan API (mendapatkan nilai pulangan)
API segerak boleh mendapatkan hasil pelaksanaan API daripada nilai pulangan, tetapi API tak segerak tidak boleh (nampaknya menulis pulangan dalam API tak segerak tidak boleh mendapatkan hasilnya?)
// 异步 function getMsg () { setTimeout(function () { return { msg: 'Hello Node.js' } }, 2000); } const msg = getMsg (); //函数没有写return 默认是返回 undefined cnsole.log(msg); // 输出的是 undefined,因为定时器还没执行完就执行了输出
Fungsi panggil balik
Tentukan fungsi anda sendiri dan biarkan orang lain memanggilnya.
// getData函数定义 function getData (callback) {} // getData函数调用 getData (() => {}); /*例子------------------*/ function getMsg (callback) { setTimeout(function () { callback ({ msg: 'Hello Node.js' }) }, 2000); } getMsg (function (msg) { console.log(msg); });
Perbezaan antara API segerak dan API tak segerak (urutan pelaksanaan kod)
API segerak dilaksanakan secara berurutan dari atas ke bawah pelaksanaan kod berikut.
API Asynchronous tidak akan menunggu pelaksanaan API selesai sebelum melaksanakan kod
Analisis jujukan pelaksanaan kod
JavaScript dibahagikan kepada kawasan pelaksanaan kod segerak dan kawasan pelaksanaan kod tak segerak Terdapat sambungan baris gilir fungsi panggil balik di antara mereka. Mula-mula, JavaScript akan melaksanakan semua kandungan kawasan kod segerak, dan kemudian pergi ke kawasan kod tak segerak untuk melaksanakan kod, cari blok kod yang telah dilaksanakan dalam kawasan kod tak segerak, dan segera cari fungsi panggil balik yang sepadan dengan blok kod tak segerak dan letakkannya dalam kawasan pelaksanaan kod segerak Untuk melaksanakan API tak segerak
dalam Node.js untuk membaca API fail, terdapat fungsi panggil balik.
API mendengar acara juga mempunyai fungsi panggil balik. (Fungsi pemprosesan acara ialah fungsi panggil balik dan API mendengar acara ialah API tak segerak) Jika pelaksanaan kod di belakang API tak segerak bergantung pada hasil pelaksanaan API tak segerak semasa, tetapi sebenarnya API tak segerak tidak kembali apabila kod berikutnya dilaksanakan Akibatnya, bagaimana untuk menyelesaikan masalah ini? Sebagai contoh, terdapat keperluan: baca fail A, fail B, dan fail C dalam urutan (baca A, kemudian baca B, kemudian baca C, ia tidak boleh dibaca pada masa yang sama)Jika keperluan di atas direalisasikan, maka Ia akan menyebabkan operasi bacaan B diletakkan dalam fungsi panggil balik A, dan operasi bacaan C diletakkan dalam fungsi panggil balik B, mengakibatkan banyak peringkat bersarang (panggil balik neraka)
Pembelajaran yang disyorkan : "
tutorial video nodejsconst fs = require('fs'); fs.readFile('./1.txt', 'utf8', (err, result1) => { console.log(result1) fs.readFile('./2.txt', 'utf8', (err, result2) => { console.log(result2) fs.readFile('./3.txt', 'utf8', (err, result3) => { console.log(result3) }) }) });"
Atas ialah kandungan terperinci Apakah perbezaan antara penyegerakan nod dan asynchronousness?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!