Promise 是使用回调函数,是把回调封装在了内部,使用上一直通过 then方法的链式调用,使得多层的回调嵌套看起来变成了同一层的,书写上以及理解上会更直观和简洁一些。
promise 实现原理
const PENDING = 'pending'; //初始状态
const FULFILLED = 'fulfilled'; // 成功状态
const REJECTED = 'rejected'; // 成功
function Promise(extutor){
let self = this;
self.status = PENDING; // 设置状态
// 存放成功回调的数组
self.onResolveCallbacks = [];
// 存放失败回调的数组
self.onRejectedCallbacks = [];
function resolve(value){
if(self.status === PENDING){
self.status = FULFILLED;
self.value = value;
self.onResolveCallbacks.forEach(cb => cd(self.value))
}
}
function reject(reason){
if(self.status === PENDING){
self.status = REJECTED;
self.value = reason;
self.onRejectCallbacks.forEach(cb => cd(self.value))
}
}
try{
excutor(resolve, reject)
} catch(e) {
reject(e)
}
}
在现实中咱们经常会使用以下代码
const p = new Promise(function(resolve, reject){
if(/*异步操作的成功*/){
resolve(value)
} else {
reject(error)
}
});
p.then(function(){
}).catch(function(e){
// 失败的操作
})