zoukankan      html  css  js  c++  java
  • 解决回调地狱

    什么是回调?

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

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

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

  • 相关阅读:
    LightOJ 1341 Aladdin and the Flying Carpet 数学
    NOIP2013 花匠 DP 线段树优化
    LightOJ 1370 Bi-shoe and Phi-shoe 欧拉函数+线段树
    BZOJ2818: Gcd 欧拉函数求前缀和
    SPOJ3267 D-query 离线+树状数组 在线主席树
    BZOJ 2588: Spoj 10628. Count on a tree 主席树+lca
    拓展欧几里得算法
    POJ1845Sumdiv(求所有因子和 + 唯一分解定理)
    UVA1635 Irrelevant Elements(唯一分解定理 + 组合数递推)
    codeforce 626E(二分)
  • 原文地址:https://www.cnblogs.com/teemor/p/8759223.html
Copyright © 2011-2022 走看看