Promise:解决回调地狱
另一个新的异步编程解决方案。语法上它是一个构造函数,用来封装异步操作并获取其成功或失败的结果
- Promise 构造函数:
1 | Promise(excutor){} |
- promise 对象有两个属性,一个显示状态:fulfilled | rejected | pending(待定/初始状态)
使用它
- 实例化
Promise
对象
1 | const pro = new Promise(function (resolve, reject) { |
resolve()
方法- 当成功获取到数据后,在实例中调用
resolve()
将数据传给处理.then()
函数 - 当获取失败后,在实例中调用
reject()
方法传参
- 当成功获取到数据后,在实例中调用
.then
方法- 它默认传入两个参数(可以只有一个成功的),第一个用于接收
resolve()
传入的数据,第二个用于接收reject()
传入的参数(一般为 Error 信息)
1 | pro.then( |
Promise 封装读取文件
以往读取文件写法:
1 | const fs = require('fs'); //引入fs模块 |
使用Promise
封装(将其包裹)
1 | const pro = new Promise(function (resolve, reject) { |
Promise 封装 Ajax
一个 xml 请求:
1 | //创建对象 |
封装它!
1 | const p = new Promise((resolve, reject) => { |
Promise.then 方法–进一步封装回调/异步
- 该方法的返回结果是
Promise
对象,其状态由回调函数的结果决定
该方法
- 如果回调函数中
return
的是非Promise
属性,then 方法返回状态为成功,返回值为对象的成功值
如果是Promise
对象 –
1 | const res = p.then((value) => { |
- 在 return 函数中使用 reject 或 throw 一个 error,then 方法返回状态都是失败
1 | return new Promise((resolve, reject) => { |
then 方法中可以使用链式调用
1 | p.then((value) => {}).then((value) => {}); |
如此一步步地推进,有效解决回调地狱
实践
Promise 封装读取多个文件
详见:尚硅谷-ES6
Promise 对象 catch 方法
它是一个then
方法的语法糖,当then
方法不指定第一个参数时与之相同
用promise实例.catch
替代它,专门用于处理错误
1 | p.catch(function (reason) { |
参考教程:b 喊尚硅谷
评论