// promise 还是基于回调的 es6-promise
// 1.promise是一个类 ,无需考虑兼容性
// 2.当使用promise的时候 会传入一个执行器,此执行器是立即执行
// 3.当前executor 给了两个函数可以来描述当前promise的状态。promise中有三个状态 成功态 失败态 等待态
// 默认为等待态 如果调用resolve会走到成功态,如果调用reject 或者发生异常 会走失败态
// 4.每个promise实例都有一个then方法
// 5.promise 一旦状态变化后不能更改
const PENDING = 'PENDING';
const FULFILLED = 'FULFILLED';
const REJECTED = 'REJECTED';
class Promise {
constructor(executor) {
this.status = PENDING; // promise默认的状态
this.value = undefined; // 成功的原因
this.reason = undefined; // 失败的原因
const resolve = (value) => { // 成功resolve函数
if (this.status === PENDING) {
this.value = value;
this.status = FULFILLED; // 修改状态
}
}
const reject = (reason) => { // 失败的reject函数
if (this.status === PENDING) {
this.reason = reason;
this.status = REJECTED // 修改状态
}
}
try {
executor(resolve, reject);
} catch (e) {
reject(e);
}
}
then( onFulfilled, onRejected){ // onFulfilled, onRejected
if(this.status == FULFILLED){ // 成功调用成功方法
onFulfilled(this.value);
}
if(this.status === REJECTED){ // 失败调用失败方法
onRejected(this.reason);
}
}
}
module.exports = Promise
手写promise1_2021-03-30
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 加载图片,用promise resolve(img) 有两个作用, 一个是 改变状态,声明状态另一个是将返回值传递...
- 这里我们先啰嗦一下Promise的概念:什么是promise Promise 是异步编程的一种解决方案,比传统的解...