中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NodeJs異步編程的含義是什么

發布時間:2022-08-08 15:07:01 來源:億速云 閱讀:142 作者:iii 欄目:web開發

本文小編為大家詳細介紹“NodeJs異步編程的含義是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“NodeJs異步編程的含義是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

首先理解什么是異步編程

含義:

  • 有異步肯定會有同步

  • 凡是回調函數存在的,都是異步代碼

  • 先執行同步代碼,看到異步代碼后,將異步代碼放到異步代碼執行區(先不執行)

  • 繼續執行同步代碼,當所有的同步代碼執行結束后,在執行異步代碼

異步代碼案例:

console.log('1');
setTimeout(()=>{
	console.log('2秒后再執行...');
},2000);
console.log('end');

程序執行完畢后的輸出結果:
1
恩德
2秒后再執行…

總結:代碼會在執行中會依次執行,但執行到回調函數,就會把回調函數放入異步代碼執行區,先不執行,如果代碼執行完后,再去依次執行放入異步代碼執行區。

同步代碼行案例:

for(let i=0;i<10;i++){
	console.log(i);
}
console.log('end');

程序執行完畢后的輸出結果:
0123456789
end
總結:同步代碼,for循環無論執行多久,下面代碼都要等待它執行完畢后才會執行。

2.為什么有異步編程

nodejs 特點是單線程、異步、非阻塞,如果代碼邏輯涉及到多個回調,就會出現非常可怕的代碼,不利于后期的維護。

而異步編程的作用就是提高效率,現在對程序越來越大,CPU和內存對壓力也越來越大,異步可以讓電腦同時處理多個事務,所以需要異步編程。

3.如何處理異步編程出現的問題

在我們項目當中,會出現一些問題,比如,拿不到值,是undefined,是因為異步編程。
解決方案:回調函數嵌套、 Promise、 await、async語法糖 變成同步

現在文件夾里有1,2,3三個txt文件,我們需要讀取這三個文件,如果直接讀取第一遍可能順序對第二遍就會出現順序混亂的情況,所以我們需要處理異步的問題,讓他按順序執行

使用回調函數嵌套代碼:

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

使用Promise代碼:

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

還可以使用 await、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()

讀到這里,這篇“NodeJs異步編程的含義是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中山市| 肃南| 漳州市| 平原县| 建阳市| 庐江县| 健康| 秭归县| 如东县| 监利县| 台东市| 宁陵县| 托里县| 长岭县| 建水县| 龙江县| 文成县| 定陶县| 青州市| 来凤县| 汶上县| 平果县| 贵溪市| 顺昌县| 成安县| 马尔康县| 大化| 甘泉县| 新兴县| 依安县| 汉阴县| 老河口市| 于都县| 平泉县| 崇左市| 乐平市| 大兴区| 奉新县| 陆河县| 灵丘县| 锡林浩特市|