1.回调地狱
多层回调函数的相互嵌套,形成了回调地狱
缺点:代码耦合性太强,牵一发而动全身,难以维护
大量冗余的代码相互嵌套,代码的可读性变差
2.如何解决回调地狱的问题
ES6中新增Promise解决回调地狱问题
3.Promise基本概念
(1)是一个构造函数:可以创建Promise的实例 const p = new Promise(),new出来的Promise对象,代表一异步操作
(2)Promise.prototype(原型对象)上包含一个 .then() 方法:
每一次new Promise()构造函数得到的实例对象都可以通过原型链的方法访问到 .then 方法,例如:p.then()
(3).then() 方法用来预先指定成功和失败的回调函数
p.then(成功的回调函数,失败的回调函数)
p.then(result => { },error => { })
调用 .then() 方法时,成功的回调函数是必选的,失败的回调函数是可选的
4.基于回调函数按顺序读取文件内容
5.基于then-fs 读取文件内容
安装 then-fs 这个第三方包,从而支持我们基于Promise的方式读取文件的内容
(1)then-fs的基本使用
调用 then-fs 提供的 readFile() 方法,可以异步的读取文件的内容,它的返回值是Promise的实例对象
(注意:上述代码无法保证文件 的读取顺序,需要进一步改进!)
(2).then() 方法特性
上一个 .then() 方法中返回了一个新的promise实例对象,则下一个 .then()继续进行处理( .then() 方法的链式调用)
(3)通过 .catch 捕获错误
如果不希望前面的错误影响后续的 .then() 执行,则可以将 .catch() 的调用提前
6.Promise.all() 方法
会发起并行的Promise异步操作,等待机制,等所有的异步操作结束后才会执行下一步的.then操作
7.Promise.race() 方法
会发起并行的Promise异步操作,只要任何一个异步操作完成,就立即执行下一步的 .then() 操作(赛跑机制)
8.基于Promise封装文件的方法
(1)方法的封装要求:
(1)方法的名称要定义为 getFile
(2)方法接受一个形参 fpath,表示要读取的文件的路径
(3)方法的返回值为Promise实例对象
(2)创建具体的异步操作
需要在 new Promise() 构造函数期间,传递一个 function函数,将具体的异步操作定义到function函数内部
(3) 获取.then() 的两个实参
Promise异步操作的结果,可以调用 resolve 或reject 回调函数进行处理