解决回调地狱

Posted teemor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决回调地狱相关的知识,希望对你有一定的参考价值。

 

什么是回调?

与大多数运行后立刻给出结果的函数不同,使用回调的函数要花一些时间才能得出结果。

难点:理解程序的运行顺序

特点: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%的一部代码,当事情变得复杂时,依靠一些库

以上是关于解决回调地狱的主要内容,如果未能解决你的问题,请参考以下文章

回调地狱的解决办法

什么是地狱回调?解决回调地狱的两种方法

promise解决回调地狱

javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方式

回调地狱以及用promise怎么解决回调地狱

避免在 javascript 中循环多次返回 - async / await 以解决回调金字塔或回调地狱,