您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“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循環無論執行多久,下面代碼都要等待它執行完畢后才會執行。
nodejs 特點是單線程、異步、非阻塞,如果代碼邏輯涉及到多個回調,就會出現非常可怕的代碼,不利于后期的維護。
而異步編程的作用就是提高效率,現在對程序越來越大,CPU和內存對壓力也越來越大,異步可以讓電腦同時處理多個事務,所以需要異步編程。
在我們項目當中,會出現一些問題,比如,拿不到值,是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異步編程的含義是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。