Promise

1.回调地狱

  多层回调函数的相互嵌套,形成了回调地狱

  缺点:代码耦合性太强,牵一发而动全身,难以维护

      大量冗余的代码相互嵌套,代码的可读性变差

2.如何解决回调地狱的问题

  ES6中新增Promise解决回调地狱问题

3.Promise基本概念

  (1)是一个构造函数:可以创建Promise的实例 const p = new Promise(),new出来的Promise对象,代表一异步操作

  (2)Promise.prototype(原型对象)上包含一个 .then() 方法:

    每一次new Promise()构造函数得到的实例对象都可以通过原型链的方法访问到 .then 方法,例如:p.then()

Promise

 

Promise

 

   (3).then() 方法用来预先指定成功和失败的回调函数

    p.then(成功的回调函数,失败的回调函数)

    p.then(result => { },error => { })

    调用 .then() 方法时,成功的回调函数是必选的,失败的回调函数是可选的

4.基于回调函数按顺序读取文件内容

   Promise

 

 5.基于then-fs 读取文件内容

  安装 then-fs 这个第三方包,从而支持我们基于Promise的方式读取文件的内容

  (1)then-fs的基本使用

    调用 then-fs 提供的 readFile() 方法,可以异步的读取文件的内容,它的返回值是Promise的实例对象

Promise

 

(注意:上述代码无法保证文件 的读取顺序,需要进一步改进!)

  (2).then() 方法特性

    上一个 .then() 方法中返回了一个新的promise实例对象,则下一个 .then()继续进行处理( .then() 方法的链式调用)

Promise

 

   (3)通过 .catch 捕获错误 Promise

 

   如果不希望前面的错误影响后续的 .then() 执行,则可以将 .catch() 的调用提前

Promise

 

 6.Promise.all() 方法

  会发起并行的Promise异步操作,等待机制,等所有的异步操作结束后才会执行下一步的.then操作

Promise

 

 7.Promise.race() 方法

  会发起并行的Promise异步操作,只要任何一个异步操作完成,就立即执行下一步的 .then() 操作(赛跑机制)

  Promise

 

 8.基于Promise封装文件的方法

  (1)方法的封装要求:

    (1)方法的名称要定义为 getFile

    (2)方法接受一个形参 fpath,表示要读取的文件的路径

    (3)方法的返回值为Promise实例对象

    Promise

  (2)创建具体的异步操作

    需要在 new Promise() 构造函数期间,传递一个 function函数,将具体的异步操作定义到function函数内部

Promise

 

  (3) 获取.then() 的两个实参

      Promise异步操作的结果,可以调用 resolve 或reject 回调函数进行处理

Promise

 

 

  

上一篇:Promise


下一篇:实现一个Promise all