Rumah >hujung hadapan web >tutorial js >Memahami secara mendalam maksud pengaturcaraan asynchronous NodeJs

Memahami secara mendalam maksud pengaturcaraan asynchronous NodeJs

藏色散人
藏色散人ke hadapan
2022-08-08 14:38:141887semak imbas

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');

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;);

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)
        })
    })
})

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!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam