Promise 是 ES6 新增的语法,解决了回调地狱的问题。
1.基础概念
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
一个 Promise 必然处于以下几种状态之一:
- 待定(pending) : 初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled) : 意味着操作成功完成。
- 已拒绝(rejected) : 意味着操作失败。
使用的基础流程:
// 1. 创建一个新的promise对象
const p = new Promise((resolve, reject) => {// 执行器函数 同步回调
console.log('执行 excutor')
// 2. 执行异步操作任务
setTimeout(() => {
const time = Date.now() // 如果当前时间是偶数就代表成功, 否则代表失败
// 3.1. 如果成功了, 调用resolve(value)
if (time % 2 == 0) {
resolve('成功的数据, time=' + time)
} else {
// 3.2. 如果失败了, 调用reject(reason)
reject('失败的数据, time=' + time)
}
}, 1000);
})
console.log('new Promise()之后')
// setTimeout(() => {
p.then(
value => { // 接收得到成功的value数据 onResolved
console.log('成功的回调', value)
},
reason => {// 接收得到失败的reason数据 onRejected
console.log('失败的回调', reason)
}
)
// }, 2000);
2.基础API
参考MDN
Promise.prototype.then:返回一个Promise。它最多需要有两个参数:Promise 的成功和失败情况的回调函数。Promise.prototype.catch返回一个Promise。并且处理拒绝的情况。它的行为与调用Promise.prototype.then(undefined, onRejected)相同。obj.catch(onRejected)的内部实现基于obj.then(undefined, onRejected)