為什么NodeJS的回調會被稱為地獄?
nodejs中提供異步操作都是使用回調函數,比如
fs.readFile('filename',function(err, data){
//todo...
})
在前端這種模式是沒什么問題的,DOM事件相對而言不會存在互相依賴或需要多個事件一起協作的場景
但是對于Node而言,事務中存在多個異步調用的場景比比皆是。比如一個遍歷目錄的操作,代碼如下:
fs.readdir(path.join(__dirname, '..'), function (err, files) {
files.forEach(function (filename, index) {
fs.readFile(filename, function (err, file) {
// todo
})
})
})
當然這個還是比較好的情況,很多時候業務邏輯很復雜,嵌套層數更多了.嵌套多了不便于閱讀理解代碼,顯得很混亂.
但好消息是Nodejs8提供了ES7的async/await語法糖,讓我們可以寫出更優雅的代碼.而且Nodejs官方自帶庫也在改變支持async/await,在Nodejs10中可以使用fs.promises,
dns.promises
了,比如可以這樣寫:const fs = require('fs').promises
async function main(){
const data = await fs.readfile('filename')
//todo
}
main()
上一篇中興貓說明書