1.Promise 是什么?

  • 1.抽象表达:
    • 1)Promise 是一门新的技术(ES6 规范)
    • 2)Promise 是 JS 中进行异步编程的新解决方案备注:旧方案是单纯使用回调函数(解决回调地狱)
  • 2.具体表达:
    • 1)从语法上来说: Promise 是一个构造函数
    • 2)从功能上来说: promise 对象用来封装一个异步操作并可以获取其成功/ 失败的结果值

2.promise 的状态改变

一般有三种

  • pending: 它的意思是 “待定的,将发生的”,相当于是一个初始状态。创建Promise对象时,且没有调用resolve或者是reject方法,相当于是初始状态。这个初始状态会随着你调用resolve,或者是reject函数而切换到另一种状态。
    image
  • reslove: 也叫fulfiller表示解决了,就是说这个承诺实现了。 要实现从pending到resolved的转变,需要在 创建Promise对象时,在函数体中调用了resolve方法(即第一个参数)。
    image
  • rejected: 拒绝,失败。表示这个承诺没有做到,失败了。要实现从pending到rejected的转换,只需要在创建Promise对象时,调用reject函数。
    image

状态之间是可以相互转换的,但是这个过程是不可逆的

  • 1.pending 变为 resolved
  • 2.pending 变为 rejected

说明: 只有这 2 种, 且一个 promise 对象只能改变一次无论变为成功还是失败, 都会有一个结果数据,在then方法里面接收,成功的结果数据一般称为 value, 失败的结果数据一般称为 reason

3.promise 的基本流程

image

4.promise 的基本使用

// 1) 创建 promise 对象(pending 状态), 指定执行器函数
const p = new Promise((resolve, reject) => {
// 2) 在执行器函数中启动异步任务
setTimeout(() => {
const time = Date.now()
// 3) 根据结果做不同处理
// 3.1) 如果成功了, 调用 resolve(), 指定成功的 value, 变为 resolved 状态
if (time%2===1) {
resolve('成功的值 '+ time)
} else { // 3.2) 如果失败了, 调用 reject(), 指定失败的 reason, 变为rejected 状态
reject('失败的值' + time)
}
}, 2000)
})

// 4) 能 promise 指定成功或失败的回调函数来获取成功的 vlaue 或失败的 reason
p.then(
value => { // 成功的回调函数 onResolved, 得到成功的 vlaue
console.log('成功的 value: ', value)
},
reason => { // 失败的回调函数 onRejected, 得到失败的 reason
console.log('失败的 reason: ', reason)
}
)