全部免费网站软件/微信营销平台系统
什么是 Promise
Promise
是一个类。
当通过
new Promise
创建一个实例时,需要传入一个回调函数,我们称之为executor
。
- 这个回调函数会被立即执行,并传入两个回调函数的参数
(resolve, reject)
。- 当调用
resolve
回调函数时,会执行 Promise 对象的then
方法传入的回调。- 当调用
reject
回调函数时,会执行 Promise 对象的catch
方法传入的回调。
Promise 是一个状态机制,它有3种状态:
- pending:待定状态,执行
executor
后,处于这个状态。- fulfilled:兑现状态,调用
resolve()
后,Promise 的状态更改为fulfilled
,并且无法再次更改。- rejected:拒绝状态,调用
reject()
后,Promise 的状态更改为rejected
,并且无法再次更改。
手写一个 Promise 编程
// 定义一个Promise的类
class newPromise {constructor(executor = () => { }) {// 执行构造函数,并把状态值设置为pendingthis.state = STATUS_PENGINDING; // 初始状态this.value = null; // 成功的返回值this.reason = null; // 失败的返回值// resolve 需要接收一个参数const resolve = (value) => {// 防止重复执行,表示状态不可逆// 只有状态是 pending 时,才会改变执行改变状态// 执行 resolve 后,状态值变成 fulfilledif (this.state === STATUS_PENGINDING) {this.state = STATUS_FULFILLED;this.value = value;}}// reject 需要接收一个参数const reject = (reason) => {// 防止重复执行,表示状态不可逆// 只有状态是 pending 时,才会改变执行改变状态// 执行 reject 后,状态值变成 rejectedif (this.state === STATUS_PENGINDING) {this.state = STATUS_REJECTED;this.reason = reason;}}// 传入的回调会返回两个参数 resolve 和 rejectexecutor(resolve, reject);}// then接收两个回调,分别用于处理成功和失败then(onFulfilled, onRejected) {// 穿透就是没有方法,则给一个默认的方法,将值传下去if (onFulfilled && typeof onFulfilled === 'function') {onFulfilled(this.value);}if (onRejected && typeof onRejected === 'function') {onRejected(this.reason);}}
}
// 执行上面定义的方法
new newPromise((resolve, reject) => {// 这两个状态只能二选一// resolve('成功返回值');reject('失败返回值');
}).then(res => {console.log('成功的', res);},err => {console.log('失败的', err);}
);