Rumah >hujung hadapan web >tutorial js >Memahami secara mendalam maksud pengaturcaraan asynchronous NodeJs
Maksud:
Jika ada tak segerak, pasti akan ada penyegerakan
Sebarang fungsi panggil balik yang wujud ialah kod tak segerak
Laksanakan kod segerak dahulu , selepas melihat kod tak segerak, letakkan kod tak segerak dalam kawasan pelaksanaan kod tak segerak (tidak dilaksanakan dahulu)
Teruskan melaksanakan kod segerak apabila semua pelaksanaan kod segerak selesai, laksanakan Kod kod tak segerak
Contoh kod tak segerak:
console.log('1'); setTimeout(()=>{ console.log('2秒后再执行...'); },2000); console.log('end');
Hasil output selepas program dilaksanakan:
1
Ende
Laksanakan semula selepas 2 saat...
Ringkasan: Kod akan dilaksanakan secara berurutan semasa pelaksanaan, tetapi apabila fungsi panggil balik dilaksanakan, fungsi panggil balik akan diletakkan ke dalam kawasan pelaksanaan kod tak segerak dan tidak akan dilaksanakan terlebih dahulu Jika Selepas kod dilaksanakan, ia dilaksanakan secara berurutan dan diletakkan di kawasan pelaksanaan kod tak segerak.
Kes baris kod disegerakkan:
for(let i=0;i<10;i++){ console.log(i); } console.log('end');
Hasil output selepas program dilaksanakan:
0123456789
tamat
Ringkasan: Kod segerak, tidak kira berapa lama gelung for dilaksanakan, kod berikut mesti menunggu sehingga ia selesai sebelum ia dilaksanakan.
nodej dicirikan oleh benang tunggal, tak segerak dan tidak menyekat Jika logik kod melibatkan berbilang panggilan balik, kod yang sangat mengerikan akan muncul. Tiada Kondusif untuk penyelenggaraan kemudian.
Peranan pengaturcaraan tak segerak adalah untuk meningkatkan kecekapan Pada masa kini, program semakin besar dan tekanan pada CPU dan memori juga semakin meningkat membolehkan komputer memproses berbilang transaksi pada masa yang sama , jadi pengaturcaraan tak segerak diperlukan.
Dalam projek kami, akan ada beberapa masalah, jika nilai tidak dapat diperoleh, ia tidak ditentukan, kerana pengaturcaraan tak segerak.
Penyelesaian: Fungsi panggil balik bersarang, Janji, tunggu, dan gula sintaks async menjadi disegerakkan
Kini terdapat tiga fail txt 1, 2 dan 3 dalam folder, dan kita perlu membaca ketiga-tiga fail ini , jika pas pertama dibaca terus, susunan pas kedua mungkin tidak teratur, jadi kita perlu menangani masalah tak segerak dan biarkan ia dilaksanakan mengikut urutan
Gunakan fungsi panggil balik untuk menyarangkan kod:
const fs=require('fs') const path =require('path') let p1=path.join('1.txt') let p2=path.join('2.txt') let p3=path.join('3.txt') fs.readFile(p1,'utf8',(err,data)=>{ if(err) throw err console.log(data) fs.readFile(p2,'utf8',(err,data)=>{ if(err) throw err console.log(data) fs.readFile(p3,'utf8',(err,data)=>{ if(err) throw err console.log(data) }) }) })
Gunakan kod Janji:
// new promise 的作用:让异步代码马上执行 const fs=require('fs') function readFile(path){ return new Promise((resolve,reject)=>{ fs.readFile(path,'utf8',(err,data)=>{ resolve(data) }) }) } let p1=readFile('1.txt') let p2=readFile('2.txt') let p3=readFile('3.txt') p1.then(result=>{ console.log(result) return p2 }).then(result=>{ console.log(result) return p3 }).then(result=>{ console.log(result) return p3 })
Anda juga boleh menggunakan await, kod gula sintaksis async:
const path=require('path') const fs=require('fs') let p1=readFile('1.txt') let p2=readFile('2.txt') let p3=readFile('3.txt') var readfile=(path)=>{ return new Promise((resolve,reject)=>{ fs.readFile(path,'utf8',(err,data)=>{ resolve(data) }) }) } async function exec() { await readfile(p1).then(result => console.log(result)) await readfile(p2).then(result => console.log(result)) await readfile(p3).then(result => console.log(result)) } exec()
[Disyorkan: nod. tutorial video js 】
Atas ialah kandungan terperinci Memahami secara mendalam maksud pengaturcaraan asynchronous NodeJs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!