一、引人: 回调地狱
多层回调函数的相互嵌套,就形成了回调地狱。 为了解决回调地狱的问题,ES6(ECMAScript 2015)中新增了 Promise 的概念
二、基本概念
基于回调函数按顺序读取文件内容
Promise 支持链式调用,从而来解决回调地狱的问题。示例代码如下:
通过 .catch 捕获错误
可以使用 Promise.prototype.catch 方法进行捕获和处理:
Promise.all() 方法
Promise.all() 方法会发起并行的 Promise 异步操作,等所有的异步操作全部结束后才会执行下一步的 .then 操作(等待机制)。
Promise.race() 方法
Promise.race() 方法会发起并行的 Promise 异步操作,只要任何一个异步操作完成,就立即执行下一步的 .then 操作(赛跑机制)。
基于 Promise 封装读文件的方法
getFile 方法的基本定义
获取 .then 的两个实参
通过 .then() 指定的成功和失败的回调函数,可以在 function 的形参中进行接收, 调用 resolve 和 reject 回调函数
Promise 异步操作的结果,可以调用 resolve 或 reject 回调函数进行处理。
三、 async/await
async/await 是 ES8(ECMAScript 2017)引入的新语法,用来简化 Promise 异步操作。
在 async/await 出现之前,开发者只能通过链式 .then() 的方式处理 Promise 异步操作。
使用 async/await 简化 Promise 异步操作的示例代码如下:①如果在 function 中使用了 await,则 function 必须被 async 修饰
②在 async 方法中,第一个 await 之前的代码会同步执行,await 之后的代码会异步执行