-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
Description
构造函数主体
// Promise构造函数接收一个executor函数,executor函数执行完同步或异步操作后,调用它的两个参数resolve和reject
var promise = new Promise(function(resolve, reject) {
/*
如果操作成功,调用resolve并传入value
如果操作失败,调用reject并传入reason
*/
})构造函数框架如下:
function myPromise(executor) {
let self = this;
self.status = "pending";
self.data = undefined;
self.onResolvedCallback = [];
self.onRejectedCallback = [];
executor(resolve, reject);
}添加捕错机制
function myPromise(executor) {
let self = this;
self.status = "pending";
self.data = undefined;
let onResolvedCallback = [];
let onRejectedCallback = [];
function resolve(value) {
// TODO
};
function reject(reason) {
// TODO
};
try {
executor(resolve, reject);
} catch (error) {
reject(error);
}
}添加 resolve / reject 方法
function resolve(value) {
if (self.status === "pending") {
self.status = "resolved";
self.data = value;
for (let i = 0; i < self.onResolvedCallback.length; i++) {
self.onResolvedCallback[i](value);
}
}
};
function reject(reason) {
if (self.status === "pending") {
self.status = "rejected";
self.data = reason;
for (let i = 0; i < self.onRejectedCallback.length; i++) {
self.onRejectedCallback[i](reason);
}
}
};