声明:本文是学习珠峰培训视频,模仿实现的Promise,通过了 promises-aplus-tests测试,文章最下面有截图。
const PENDING = 'pending'; // 初始态
const FULFILLED = 'fulFilled'; // 成功态
const REJECTED = 'rejected'; // 失败态
function Promise(exector) {
let self = this; // 先缓存当前的 Promise实例
self.status = PENDING; // 设置状态
self.onResolvedCallbacks = []; // 定义存放成功回调的数组
self.onRejectedCallbacks = []; // 定义存放失败回调的数组
function resolve(value) {
if (value instanceof Promise) {
return value.then(resolve, reject);
}
// 当调用此方法的时候,如果是pending状态,则转成 成功态
if (self.status === PENDING) {
self.status = FULFILLED;
self.value = value; // 成功后会得到一个值,这个值不能改
// 调用所有成功的回调
self.onResolvedCallbacks.forEach(cb => cb(self.value))
}
}
function reject(reason) {
// 如果是初始态,则转成失败态
if (self.status === PENDING) {
self.status = REJECTED;
self.value = reason; // 失败的原因 给value
// 调用所有失败的回调
self.onRejectedCallbacks.forEach(cb => cb(self.value))
}
}
try {
exector(resolve, reject); // 因为此函数执行的时候,可能出异常,所以需要捕获,如果出错了,需要用错误对象Reject
} catch (e) {