Promise
1 Promise 的定义和使用
Promise 是 ES6 引入的异步编程的新解决方案,语法上 Promise 是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果
一个 Promise 必然处于以下几种状态之一
- 待定 pending:初始状态,既没有被兑现,也没有被拒绝
- 已兑现 fulfilled:意味着操作成功完成
- 已拒绝 rejected:意味着操作失败
Promise 的使用
- Promise 构造函数new Promise((resolve, reject) => {})
- Promise.prototype.then()方法
- Promise.prototype.catch()方法
1 | let p = new Promise(function (resolve, reject) { |
2 Promise 封装读取文件
1 | // 使用 nodejs 的 fs 读取文件模块 |
3 Promise 封装 Ajax 请求
1 | const p = new Promise((resolve, reject) => { |
4 Promise.prototype.then 方法
Promise.prototype.then 方法返回的结果依然是 Promise 对象,对象状态由回调函数的执行结果决定
具体情况如下
- 若 then 方法写返回值,则 then 方法返回的对象的状态值为成功 fulfilled,返回结果值为 undefined
1 | const p = new Promise((resolve, reject) => { |
- 如果回调函数中返回的结果是非 Promise 类型的属性,则 then 方法返回的对象,其状态为成功 fulfilled,返回结果值取决于 then 方法所执行的是哪个函数(resolve 或 reject)
1 | const p = new Promise((resolve, reject) => { |
- 如果回调函数中返回的结果是 Promise 类型 return new Promise(),则 then 方法返回的 Promise 对象状态与该返回结果的状态相同,返回值也相同
1 | const p = new Promise((resolve, reject) => { |
- 如果回调函数中返回的结果是 throw 语句抛出异常,则 then 方法的对象的状态值为 rejected,返回结果值为 throw 抛出的字面量或者 Error 对象
1 | const p = new Promise((resolve, reject) => { |
4 链式调用
Promise.prototype.then 方法返回的结果还是 Promise 对象,这意味着我们可以继续在该结果上使用 then 方法,也就是链式调用,杜绝回调地狱
1 | const p = new Promise(resolve=>{}, reject=>{}); |
5 Promise.prototype.catch
catch() 方法返回一个 Promise,并且处理拒绝的情况
它的行为与调用 Promise.prototype.then(undefined, onRejected) 相同
1 | obj.catch(onRejected); |
语法
1 | p.catch(onRejected); |
举例
1 | var p1 = new Promise(function (resolve, reject) { |
6 链式调用练习-多个文件读取
1 | const fs = require('fs'); |
以上只是 Promise 的入门,更多还要进一步深入学习