Memahami secara mendalam maksud pengaturcaraan asynchronous NodeJs

藏色散人
Lepaskan: 2022-08-08 14:38:14
ke hadapan
1793 orang telah melayarinya

Mula-mula faham apa itu pengaturcaraan tak segerak

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');
Salin selepas log masuk

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(&#39;end&#39;);
Salin selepas log masuk

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.

2. Mengapa pengaturcaraan tak segerak

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.

3. Bagaimana menangani masalah yang timbul dalam pengaturcaraan tak segerak

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(&#39;fs&#39;)
const path =require(&#39;path&#39;)
let p1=path.join(&#39;1.txt&#39;)
let p2=path.join(&#39;2.txt&#39;)
let p3=path.join(&#39;3.txt&#39;)
fs.readFile(p1,&#39;utf8&#39;,(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)
        })
    })
})
Salin selepas log masuk

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
})
Salin selepas log masuk

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()
Salin selepas log masuk

[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!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!