Promise和async/await

目录

1. 回调地狱

1.1 如何解决回调地狱的问题

2.Promise 的基本概念

2.1 基于回调函数按顺序读取文件内容​编辑 

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

3.1 then-fs 的基本使用

3.2 .then() 方法的特性

3.3 基于 Promise 按顺序读取文件的内容

3.4 通过 .catch 捕获错误

3.5 Promise.all() 方法

3.6 Promise.race() 方法

4. 基于 Promise 封装读文件的方法

4.1 getFile 方法的基本定义​编辑

4.2 创建具体的异步操作

4.3 获取 .then 的两个实参

4.4 调用 resolve 和 reject 回调函数

5. async/await

5.1. 什么是 async/await

5.2. async/await 的基本使用

5.3. async/await 的使用注意事项


 

1. 回调地狱

多层回调函数的相互地狱代码如下:

Promise和async/await_第1张图片

Promise和async/await_第2张图片

回调地狱的缺点:

代码耦合性太强,牵 发而 以维护
大量冗余的代码相互 套, 可读 变差

1.1 如何解决回调地狱的问题

为了解决回调地狱的ES6(ECMAScript 2015)中新 Promise 的概念。

2.Promise 的基本概念

Promise 是一个构造函数

我们可以创建 Promise 的实 const p = new Promise()
new 出来的 Promise 实例对象, 代表一个 步操作

Promise.prototype 上包含.then() 方法

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

.then() 方法用来预先指定功和回调

p.then( 成功的回调 )
p.then( result => { }, error => { })
.then() 方法时,成功的回调 数是 、失 的回 是可

2.1 基于回调函按顺序读取文件内容Promise和async/await_第3张图片 

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

node.js 官方提供fs 模块仅支持回调函的方读取不支持 Promise 的调用方式。因此,需 要先运行如下的命令then-fs 这个第三方包,从而支我们 Promise 的方式读取文件的内容:

3.1 then-fs 的基本使用

then-fs 提供readFile() 方法,可以异步地取文的返值是 Promise 的实。因 此可以.then() 方法为每个 Promise 异步操作指定成功的回。示代码如下:Promise和async/await_第4张图片

注意:上述的代保证读取进一的改 

3.2 .then() 方法的特性

如果上一 .then() 方法返回了一个新 Promise 实例对象,则可以通过一个 .then() 继续进行处理。通

.then() 方法的链式调用,就解了回的问

3.3 基于 Promise 按顺序读取文件的内容

Promise 支持链式调用,从而回调狱的示例码如下:Promise和async/await_第5张图片

3.4 通过 .catch 捕获错误

Promise 的链式操作中如果生了可以使 Promise.prototype.catch 方法进行捕获和处理:Promise和async/await_第6张图片

 如果不希望前面的错导致 .then 无法正常执行,可以 .catch 的调用提,示例码如下:Promise和async/await_第7张图片

3.5 Promise.all() 方法

Promise.all() 方法会发起并行 Promise 异步操作,所有的异操作束后会执步的 .then

操作(等待机制)。例代如下:Promise和async/await_第8张图片

注意:组中 Promise 实例,  就是最终结果的顺序! 

3.6 Promise.race() 方法

Promise.race() 方法会发起并行 Promise 异步操作只要任何一操作成,执行下一步的.then 操作(赛跑机制)示例下:

Promise和async/await_第9张图片

4. 基于 Promise 封装读文件的方法

        方法的封装要求:

        ①  方法的名称要定义getFile

        ②  方法接收一个fpath表示要读取文件路径

        ③  方法返回值 Promise 实例对象

4.1 getFile 方法的基本定义Promise和async/await_第10张图片

注意:第 5 行代码中new Promise() 只是创建了一个上的 

4.2 创建具体的异步操作

如果想要创建具体的步操需要new Promise() 构造函数期间,传递一function 函数将具体的 异步操作定义function 函数内部如下:Promise和async/await_第11张图片

4.3 获取 .then 的两个实参

.then() 指定的成功失败调函function 形参中进行接收,例代如下:Promise和async/await_第12张图片

4.4 调用 resolve reject 回调函数

Promise 异步操作的结果,可resolve reject 回调函数进行处理代码下:

Promise和async/await_第13张图片

5. async/await

5.1. 什么是 async/await

async/await ES8(ECMAScript 2017)引入新语,用简化 Promise 异步操作。在 async/await 出 现之前,开发者只能.then() 的方式处理 Promise 异步操作。示例代码如下:Promise和async/await_第14张图片

.then 链式优点:  解决了回调地狱的问题

.then 链式缺点:  代码冗余、阅读性差、 不易理解

5.2. async/await 的基本使用

使用 async/await 简化 Promise 异步操作的示例代码如下:Promise和async/await_第15张图片

5.3. async/await 使用注意事项

如果function 使用了 await function 必须 async 修饰

async 方法中,第一个 await 之前的代码会同步执,await 之后的代码会异步

Promise和async/await_第16张图片

Promise和async/await_第17张图片

你可能感兴趣的:(Vue,ES5和ES6,AJAX,前端,Promise,回调地狱,async/await,.then)