当前位置:   article > 正文

Promise 原理_promise是什么的语法糖

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:案例

  1. const promise1 = new Promise((resolve, reject) => {
  2.     setTimeout(() => {
  3.         resolve('promise1');
  4.     },5000)
  5. });
  6. promise1.then((val) => {
  7.     console.log(val,':promise1.then');
  8.     return 'promise1.then';
  9. });
  10. const promise2 = promise1.then((val) => {
  11.     //  1、promise1.then首先新建一个新的promise,为后续的链式提供then方法
  12.     //  2、根据promise当前状态,执行注册内容调用
  13.     console.log(val,':promise1-promise1');
  14.     return 'promise1-promise1';
  15. }).then((val) => {
  16.     console.log(val,':promise2-2');
  17.     return 'promise2-2';
  18. }).then((val) => {
  19.     console.log(val,':promise2-3');
  20.     return 'promise2-3';
  21. });
  22. promise2.then((val)=> {
  23.     console.log(val, 'promise2-xxx');
  24.     return 'promise2-xxx';
  25. });
  26. promise1.then((val) => {
  27.     console.log(val, ':promise1.then2');
  28.     return 'promise1.then2';
  29. });

执行结果:

  1. promise1 :promise1.then
  2. promise1 :promise1-promise1
  3. promise1 :promise1.then2
  4. promise1-promise1 :promise2-2
  5. promise2-2 :promise2-3
  6. promise2-3 promise2-xxx

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/876488
推荐阅读
  

闽ICP备14008679号