1 回答

TA贡献1826条经验 获得超6个赞
Promise的思想就是把所有同步和异步的代码都视为异步代码,then方法内部会返回一个新的Promise
(链式调用),then方法的第一个参数onfulfilled
是在前一个Promise
对象的异步调用完成之后调用的
then(onfulfilled, onrejected){
// 每个then方法都返回一个新的promise对象,实现链式调用
return new Promise((resolve, reject)=>{
let success = (value)=>{
// 这里执行onFulfilled,判断是否是promise对象并将返回结果作为参数传递到当前promise的reslove中
// 如果没有返回值,则默认返回原本的value值,这一步的处理并不是必须的
let result = onfulfilled(value) || value;
if (isThenable(result)){
result.then((value)=>{
resolve(value);
}, (value)=>{
reject(value);
});
}else {
resolve(result);
}
}
let error = (value)=>{
let result = onrejected(value) || value;
resolve(result);
}
// 当调用then方法的那个promise对象onfulfilled时调用success,执行上面的操作
switch(this.status){
case PENDING:
this.onfulfilled = success;
this.onrejected = error;
break;
case FULFILLED:
success(this.value);
break;
case REJECTED:
error(this.reason);
break;
}
})
}
这里还是牵扯到Promise
构造函数内部的一些实现,刚好前几天实现了一个简单的Promise,这里是传送门,希望对您有所帮助
添加回答
举报