解决回调地狱
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%的一部代码,当事情变得复杂时,依靠一些库
以上是关于解决回调地狱的主要内容,如果未能解决你的问题,请参考以下文章