首页 > 其他分享 >Promise的理解

Promise的理解

时间:2023-05-29 15:47:08浏览次数:27  
标签:返回 异步 对象 rejected fulfilled 理解 Promise

三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败);
状态变化:pending ---> fulfilled 或 pending --> rejected (变化不可逆);

then 和 catch 对状态的影响:

then 和 catch 正常状态都会返回 fulfilled,里面有报错则返回 rejected

Promise解决多次调用的面条式代码

将每个异步操作封装在一个Promise对象中,并通过Promise的then方法来处理异步操作的结果。
将多个Promise对象组合成一个Promise链。在Promise链中,每个Promise对象的结果都依赖于上一个Promise对象的结果。可以通过返回一个新的Promise对象来实现Promise链。
在Promise链中,可以使用Promise的catch方法来处理错误信息。如果任何一个Promise对象出错,整个Promise链都会立即终止,并且会跳过后续的Promise对象。

.all方法

Promise.all([a,b,c...])
传入 Promise 数组,等待全部的 Promise 都 fulfilled 后,返回新的 Promise,包含所有的结果。一个失败,就返回失败。
.all的作用是使多个异步操作并行执行,并等待所有异步操作都完成后再进行下一步操作。它接收一个Promise对象数组作为参数,并返回一个新的Promise对象。当所有的Promise对象都完成时,会变为fulfilled状态,并且会将所有Promise对象的结果组成一个数组传递给它的then方法;如果其中任何一个Promise对象被rejected,则返回的Promise对象会立即变为rejected状态,并且会将第一个被rejected的Promise对象的错误原因传递给它的catch方法。

.rece方法

Promise.race([a,b,c...])
传入Promise 数组,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变,如果第一个就是失败了,就返回rejected。
.race的作用是允许在多个异步操作中只取最快的结果,从而加速整个异步流程。

Promise 优缺点:

优点:实现链式调用,避免了层层嵌套的回调函数。
Promise 对象提供统一的接口,使异步操作更加容易控制。
可以同时执行多个异步操作,结果返回后统一处理。
缺点:一旦开始执行就无法取消;
无法进度追踪,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

作者:刘国伟

标签:返回,异步,对象,rejected,fulfilled,理解,Promise
From: https://www.cnblogs.com/DTCLOUD/p/17440620.html

相关文章

  • 译文:理解Java中的弱引用
    不久之前,我面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经......
  • 转载:Servlet 工作原理解析
     Servlet工作原理解析 Web技术成为当今主流的互联网Web应用技术之一,而Servlet是JavaWeb技术的核心基础。因而掌握Servlet的工作原理是成为一名合格的JavaWeb技术开发人员的基本要求。本文将带你认识JavaWeb技术是如何基于Servlet工作,你将知道:以Tomcat为例......
  • 理解Java中的ThreadLocal
    提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和认识,希望让大家理解ThreadLocal更加透彻一些。ThreadLocal是什么 ThreadLocal是一个关于创建线程局部变量的类。通......
  • C++头文件理解
    看了下公司内部对于头文件的使用,感觉挺乱的。对于头文件容易搞混淆的点在于:涉及多文件,多次包含的时候容易搞错比如上面CPP就有三四个文件,每一个CPP都要按照先包含config,后包含common的顺序,在编译的时候指明。但是include头文件本质上就是:在编译时把指定的文件,包含到调用的地方......
  • 对SpringIOC和SpringAOP的理解
    SpringIOC和SpringAOP是Spring的两个核心组件。SpringIOC:SpringIOC是一个管理bean的容器,能够帮我们管理bean的整个生命周期,在没有SpringIOC的时候,我们需要自己手动的管理bean以及bean的依赖关系,这样会增加耦合,而有了SpringIOC,它能帮我们管理bean以及bean的依赖关系,使得代码解耦。......
  • xargs 命令理解
    xargs命令的作用:主要用于参数替换,用于弥补有些命令(rm,kill,echo等)不能从管道中读取数据的不足。xargs命令默认的命令和默认的定界符xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代......
  • 最简单理解高内聚低耦合
    低耦合:耦合就是元素与元素之间的连接,感知和依赖量度。这里说的元素即是功能,对象,系统,子系统,模块。例如:现在有方法A和方法B我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就不能正常的工作,那么就说元素A和元素B耦合耦合带来的问题:当元素B变更或者不存在时,都将影响......
  • 对volatile的理解
    volatile保证了线程之间的可见性。即某个线程修改了一个共享变量,这个变量立刻对所有线程可见。volatile保证了指令重排序:用volatile修饰的共享变量在读、写时会加入一个内存屏障,保证了指令重排序。volatile可以保证可见性、有序性,但是不能保证原子性。......
  • JVM 例子,理解
     一个线程一个栈,栈为线程私有。图中只有一个main线程。某方法返回时,它对应的栈帧也会释放掉。方法区进行类加载,类的字节码中有代码code所有对象都在堆进行分配 main线程的时间片(内核分配的)用完了, 上下文切换,cpu执行t1,要把main线程的栈帧都保存下来......
  • 深入理解 Java 虚拟机 —— Java 内存模型与线程
    处理器的效率和一致性(与java内存访问可类比)计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处......