Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
简易promise实现:
const PENDING = "PENDING";
const RESOLVE = "RESOLVE";
const REJECT = "REJECT";
class MyPromise {
status = '';
value = '';
reason = '';
constructor(handler) {
this.status = PENDING;
const resolve = (value) => {
if (this.status == "PENDING") {
this.status = RESOLVE;
this.value = value;
}
};
const reject = (reason) => {
if (this.status == "PENDING") {
this.status = REJECT;
this.reason = reason;
}
};
try {
handler(resolve, reject);
} catch (e) {
reject(e);
}
}
then(onFulfilled) {
if (this.status == RESOLVE) {
onFulfilled(this.value);
}
}
catch(onRejected) {
if (this.status == REJECT) {
onRejected(this.reason);
}
}
}
const p1 = new MyPromise((resolve, reject) => {
reject(1);
});
p1.then((e) => console.log(e));
p1.catch((e) => console.log(e));