Promise 原理

Promise意义:

promise是异步调用的语法糖,其最大优势就是把原来的ajax或httpXmlRequest的嵌套回调调用,转化为链式调用,增强了书写规范和避免地域回调带来弊端。

Promise原理:

在使用promise要注意,promise分为三种状Pending(进行中),Fulfilled(已成功),Rejected(已失败),当执行成功时Pending转化Fulfilled,当执行失败时,Pending转化为Rejected。而且转化不可逆。

Promise实现类分为:状态管理、执行结果、执行成功回调和执行失败回调,其内部实现好比是一个订阅/发布,回调列表通过then注册,由执行状态触发。

Promise可以实现多个订阅者(then),但单个Promise执行状态只有储存一个执行结果,为保证在多个回调中既可以共享执行结果,又可以链式处理结果,形成流水操作,在书写时特别要注意:promise.then方法注册时,会发回一个新的promise对象,即const promise1 = new Promise(cb).then()和const promise1 = new Promise(cb).then().then()不是同一个promise对象。如果共享同一个执行结果写法:

const promise1 = new Promise(cb);

promise1.then(onLisener1);

promise1.then(onLisener2);

这样就可以保证onLisener1,onLisener2入参一致性。

若想链式处理执行结果,且前一个执行结果是后一个入参,则采用const promise1 = new Promise(cb).then(onLisener1).then(onLisener2);

Promise:案例

const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('promise1');
    },5000)
});

promise1.then((val) => {
    console.log(val,':promise1.then');
    return 'promise1.then';
});

const promise2 = promise1.then((val) => {
    //  1、promise1.then首先新建一个新的promise,为后续的链式提供then方法
    //  2、根据promise当前状态,执行注册内容调用
    console.log(val,':promise1-promise1');
    return 'promise1-promise1';
}).then((val) => {
    console.log(val,':promise2-2');
    return 'promise2-2';
}).then((val) => {
    console.log(val,':promise2-3');
    return 'promise2-3';
});

promise2.then((val)=> {
    console.log(val, 'promise2-xxx');
    return 'promise2-xxx';
});

promise1.then((val) => {
    console.log(val, ':promise1.then2');
    return 'promise1.then2';
});

执行结果:

promise1 :promise1.then
promise1 :promise1-promise1
promise1 :promise1.then2
promise1-promise1 :promise2-2
promise2-2 :promise2-3
promise2-3 promise2-xxx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值