1. 程式人生 > >解決回調地獄

解決回調地獄

代碼 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%的一部代碼,當事情變得復雜時,依靠一些庫

解決回調地獄