promise的特性,优缺点,动⼿实现promise
promise的特性
1.对象的状态不受外界影响。promise对象代表⼀个异步操作,有3种状态: pending(初始状态),fulfilled(成功状态),rejected(失败状态)。只有异步操作的结果才能决定当前的状态,任何其它操作都不能改变这个状态。
2.⼀旦状态改变就不会再变,任何时候都可以得到这个结果。promise状态的改变只有两种情况: pending 到 fulfillted, pending 到rejected。
promise优缺点
优点:有了promise对象,就可以把异步操作以同步操作的流程表达出来,避免层层嵌套回调函数,此外promise对象提供统⼀的接⼝,使得控制异步操作更加容易。
缺点:⼀旦新建就⽆法取消,会⽴即执⾏。如果不设置回调函数,promise 内部抛出的错误,不会反应到外部。当前处于pending状态,⽆法得知进⾏到哪⼀步了(刚刚开始还是即将结束)。
动⼿实现promise
function promise(callback) {
let that = this;
that.status = 'pending'; //状态
that.value = undefined; //状态为resolved
function resolved (value) {
if (that.status === 'pending') {
that.status = 'resolved';
that.value = value;
}
}
function rejected(reason) {
if(that.status === 'pending') {
that.status = 'rejected';
}
}
try {
callback(resolved, rejected);
}catch(e){
rejected(e)
}
promise.prototype.then = (onFulfilled, onRejected) => {
let that = this;
switch(that.status) {
case 'resolved' : onFulfilled(that.value);break;
case 'rejected' : ason);break;
default;
}
}
}
const myPromise = new promise((resolve, reject) => {
resolve(1)
pending
})
myPromise.then((x) => console.log(x))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论