解決回調地獄
阿新 • • 發佈:2018-04-09
代碼 npm mat 可能 identify 每一個 模塊化 console math
什麽是回調?
與大多數運行後立刻給出結果的函數不同,使用回調的函數要花一些時間才能得出結果。
難點:理解程序的運行順序
特點:1.回調函數只是儲存了將要運行的東西2.不要從上到下閱讀順序
什麽是回調地獄?
fs.readdir(source, function (err, files) { if (err) { console.log(‘Error finding files: ‘ + err) } else { files.forEach(function (filename, fileIndex) { console.log(filename) gm(source + filename).size(function (err, values) { if (err) { console.log(‘Error identifying file size: ‘ + err) } else { console.log(filename + ‘ : ‘ + values) aspect = (values.width / values.height) widths.forEach(function (width, widthIndex) { height = Math.round(width / aspect) console.log(‘resizing ‘ + filename + ‘to ‘ + height + ‘x‘ + height) this.resize(width, height).write(dest + ‘w‘ + width + ‘_‘ + filename, function(err) { if (err) console.log(‘Error writing file: ‘ + err) }) }.bind(this)) } }) }) } })
為什麽會出現回調地獄
從上到下書寫
怎麽解決回調地獄?
1. 減少代碼嵌套
2.模塊化
3.處理每一個錯誤(①語法錯誤②運行時錯誤③平臺錯誤)
4.創建可重用函數,寫成模塊,讓你更容易讀懂代碼。
模塊:
1.先把經常重復使用的功能寫成一個函數
2.當中國函數寫的夠大之後,把他移動到另一個文件,用Module.exports暴露他,然後用require導入
3.如果你的代碼是通用的,可以寫readme文件和package.json發布到Npm或者github
4.一個好模塊,體積要小,而且針對只一個問題
5.模塊中的單個文件不應超過約150行
6.模塊不應該有多個級別的嵌套文件夾,其中包含javascript文件。如果是這樣,他可能做得太多了
7.讓有經驗的程序員介紹你一些好用的模塊,嘗試理解中國模塊的功能,如果花了幾分鐘的話,中國模塊可能就不夠好了。
promise是什麽?
讓你從上至下寫回調函數,鼓勵使用try/catch處理更多類型的錯誤
generator
暫停一個函數(而不是暫停整個程序),他能讓你從上至下寫異步函數,但是代價是代碼有點復雜難以理解
async functions
es7的特性,是生成器和promise更高級的封裝。
回調處理90%的一部代碼,當事情變得復雜時,依靠一些庫
解決回調地獄