浅谈对Promise的理解。

一、Promise定义

        JS中用于处理异步操作的编程模式。一个Promise是一个代理,它代表一个创建Promise时不一定已知的值。它允许我们将处理的程序与异步操作的最终成功值或失败值原因想关联起来。这使得异步方法可以像同步方法一样返回值:异步方法不会立即返回最终值,而是返回一个Promise,以便在将来的某个时间点提供该值。

二、Promise的三种状态

pending:表示初始状态,未完成,也未被拒绝。

fulfilled:表示成功完成。

rejected:表示操作失败。

三、Promise的链式调用

        Promise.prototype.then()、Promise.prototype.catch()、Promise.prototype.finally(),由于这些方法返回了Promise,因此可以被链式调用。

        .then()方法最多接受两个参数:第一个参数是成功的回调,第二个参数是拒绝时的参数。每个.then()返回一个新生成的Promise对象,这个对象可被链式调用。如果.then()方法中处理拒绝状态的回调函数,且没有返回一个新的Promise,那么Promise会继续执行下一个.then(),一般将错误处理推迟到Promise链末尾,使用.catch()捕获整个链中任何拒绝状态。将错误处理推迟到.catch()能更好的组织代码,集中处理拒绝状态。

        一个Promise的终止条件决定了链中下一个Promise的“已敲定”状态。fulfilled表示Promise成功完成,rejected表示Promise执行失败。链中成功的Promise返回值传递给下一个.then(),而已拒绝的Promise把失败的原因传递给链中下一个拒绝处理函数。

        链式调用中Promise就像俄罗斯套娃一样,是嵌套起来的,但又像一个栈,每次都从顶端被弹出。链式调用中第一个Promise是嵌套最深的,也是第一个被弹出的。

四、Promise并发

1、Promise.all()

        Promise.all()静态方法接受一个Promise可迭代对象作为输入,并返回一个Promise。当所有输入的Promise都成功时,会返回一个所有成功值的数组。如果输入任何Promise被拒绝,返回的Promise将被拒绝,并带有第一个被拒绝的原因。

语法:

Promise.all(iterable)

iterable一个可迭代对象,例如Array或String。

2、Promise.allsettled()

        Promise.allSettled() 静态方法将一个 Promise 可迭代对象作为输入,并返回一个单独的 Promise。当所有输入的 Promise 都已敲定时(包括传入空的可迭代对象时),返回的 Promise 将被兑现,并带有描述每个 Promise 结果的对象数组。

语法:

Promise.allSettled(iterable)

Promise.allSettled() 方法是 promise 并发方法之一。在你有多个不依赖于彼此成功完成的异步任务时,或者你总是想知道每个 promise 的结果时,使用 Promise.allSettled() 。

相比之下,如果任务相互依赖,或者如果你想在任何 promise 被拒绝时立即拒绝,Promise.all() 返回的 Promise 可能更合适。

3、Promise.any()

    Promise.any() 静态方法将一个 Promise 可迭代对象作为输入,并返回一个 Promise。当输入的任何一个 Promise 兑现时,这个返回的 Promise 将会兑现,并返回第一个兑现的值。当所有输入 Promise 都被拒绝(包括传递了空的可迭代对象)时,它会以一个包含拒绝原因数组的 AggregateError 拒绝。

Promise.any() 方法是 Promise 并发方法之一。该方法对于返回第一个成功的 Promise 非常有用。一旦有一个 Promise 成功,它就会立即返回,因此不会等待其他 Promise 完成。

与 Promise.all() 返回一个成功值数组不同的是,我们只会得到一个成功值(假设至少有一个 Promise 成功)。此方法对于那些如果我们只需要一个 Promise 成功,但不在意哪一个成功的情况更有益。请注意另一个区别:该方法在接收到空的可迭代对象时会拒绝,因为实际上,该可迭代对象不包含任何兑现的项。你可以将 Promise.any() 和 Promise.all() 与 Array.prototype.some() 和 Array.prototype.every() 进行比较。

同时,与 Promise.race() 返回第一个敲定(无论是成功还是失败)的值不同的是,该方法返回第一个成功的值。该方法忽略所有被拒绝的 Promise,直到第一个被兑现的 Promise。

使用场景:显示第一张已加载的图片

4、Promise.race()

        Promise.race() 静态方法接受一个 promise 可迭代对象作为输入,并返回一个 Promise。这个返回的 promise 会随着第一个 promise 的敲定而敲定。

Promise.race() 方法是 Promise 并发方法之一。当你想要第一个异步任务完成时,但不关心它的最终状态(即它既可以成功也可以失败)时,它就非常有用。

如果可迭代对象中包含一个或多个非 promise 值和/或已敲定的 promise,则 Promise.race() 将以可迭代对象中找到的第一个此类值敲定。

请注意,JavaScript 的本质上是单线程的,因此在任何时刻,只有一个任务会被执行,尽管控制权可以在不同的 Promise 之间切换,从而使 Promise 的执行看起来是并发的。在 JavaScript 中,并行执行只能通过 worker 线程实现。

五、实例属性

        这些属性定义在 Promise.prototype 上,由所有的 Promise 实例共享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/608635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp最简单的底部兼容安全区域显示

效果图&#xff1a; 1.html写上动态padding-bottom <view class"button-wrap" :style"padding-bottom:bottomPaddingrpx"><view class"com-btn cencel-btn">取消</view><view class"com-btn confirm-btn " cl…

神经网络中的梯度爆炸

梯度爆炸是深度学习中的一种常见问题&#xff0c;指的是在反向传播过程中&#xff0c;某些梯度的值变得非常大&#xff0c;导致数值溢出或趋近于无穷大。梯度爆炸通常会导致训练不稳定&#xff0c;模型无法收敛&#xff0c;或者产生不可靠的结果。 梯度爆炸可能发生在深度神经…

【PostgreSQL创建索引的锁分析和使用注意】

1.1 创建普通B-tree索引的整体流程 如下是梳理的创建普通B-tree索引的大概流程&#xff0c;可供参考。 1.校验新索引的Catalog元数据|语法解析 ---将创建索引的sql解析成IndexStmt结构&#xff5c;校验B-Tree的handler -----校验内核是否支持该类型的索引,在pg_am中查找&q…

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

Clojure 实战(4):编写 Hadoop MapReduce 脚本

Hadoop简介 众所周知&#xff0c;我们已经进入了大数据时代&#xff0c;每天都有PB级的数据需要处理、分析&#xff0c;从中提取出有用的信息。Hadoop就是这一时代背景下的产物。它是Apache基金会下的开源项目&#xff0c;受Google两篇论文的启发&#xff0c;采用分布式的文件…

Spark Core--加强

RDD的持久化 RDD缓存 当RDD被重复使用&#xff0c;或者计算该RDD比较容易出错&#xff0c;而且需要消耗比较多的资源和时间的时候&#xff0c;我们就可以将该RDD缓存起来。 主要作用: 提升Spark程序的计算效率 注意事项: RDD的缓存可以存储在内存或者是磁盘上&#xff0c;甚至…

小程序开发之uniapp项目框架搭建

出于对技术的实践&#xff0c;以及博主最近刚刚拥有了一台自己的云服务器&#xff0c;本着闲着也是闲着的态度&#xff0c;准备着手开发一款快递下单、查询快艇实时状态的多端小程序&#xff0c;又不想在各个小程序平台重复开发&#xff0c;因此选择了uinapp 。 博主先讲诉一下…

【数据结构】二叉树链式结构详解

目录 1.前言2.快速创建一颗二叉树3.二叉树的遍历3.1前序遍历3.2中序遍历3.3后序遍历3.4层序遍历 4.二叉树节点个数与高度4.1二叉树节点个数4.2二叉树叶子节点个数4.3二叉树高度4.4二叉树第k层节点个数4.5二叉树查找值为x的节点 5.二叉树的基础oj题练习6.二叉树的创建和销毁6.1通…

贪心算法的“左最优“与“右最优“

1 答疑 1.1 什么是贪心算法的"左最优"与"右最优" "左最优"和"右最优"是贪心算法中的两种策略&#xff1a; 左最优 (Leftmost Greedy): 在每一步选择中&#xff0c;总是选择最左边&#xff08;最早出现的&#xff09;可行的选项。 右…

JVM,JRE,JDK的区别和联系简洁版

先看图 利用JDK&#xff08;调用JAVA API&#xff09;开发JAVA程序后&#xff0c;通过JDK中的编译程序&#xff08;javac&#xff09;将我们的文本java文件编译成JAVA字节码&#xff0c;在JRE上运行这些JAVA字节码&#xff0c;JVM解析这些字节码&#xff0c;映射到CPU指令集或…

洛谷——P1069 [NOIP2009 普及组] 细胞分裂(分解质因数,唯一分解定理)

文章目录 一、题目[NOIP2009 普及组] 细胞分裂题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 二、题解1.基本思路&#xff1a;2.代码&#xff1a; 一、题目 [NOIP2009 普及组] 细胞分裂 题目描述 Hanks 博士是 BT&#xff08;…

粒子群算法优化支持向量SVM的供热量预测,粒子群优化支持向量机SVM回归分析

目录 背影 支持向量机SVM的详细原理 SVM的定义 SVM理论 粒子群算法原理 SVM应用实例,粒子群算法优化支持向量SVM的供热量预测,粒子群优化支持向量机SVM回归分析 代码 结果分析 展望 完整代码:粒子群算法优化支持向量SVM的供热量预测,粒子群优化支持向量机SVM回归分析_lssv…

Spring学习 基于注解的AOP配置

5.1.创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

springCould中的Config-从小白开始【10 】

目录 &#x1f32d;1.spring cloud Config是什么&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️ &#x1f953;2.能干什么&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️ &am…

SSH远程访问出现Permission denied(password)解决方法

首先&#xff0c;这个不是密码输错了的问题&#xff1b; 1、在主机先ping一下服务器 ping XXX.XXX.XX.XXX (服务器ip地址) 如果pin成功了&#xff0c;说明可以进行连接 查看服务器的ip ifconfig2、主机连接服务器 &#xff08;服务器的ip&#xff09; ssh testXXX.XXX.XX.…

mysql 删除查询语句所选出的数据 SQL查询,用于找出outbox表中memo1字段重复且dt字段不是最新日期的记录

编写一个SQL查询&#xff0c;用于找出outbox表中memo1字段重复且dt字段不是最新日期的记录 批量打印包装箱时&#xff0c;提示有重复N条的处理方法&#xff1a; –先备份数据库&#xff0c;删除不可逆。查出来&#xff0c;如果就是重复的N条&#xff0c;全选右键 删除 SELECT …

LeetCode-数组-双指针-中等难度

文章目录 双指针1. 删除有序数组中的重复项&#xff08;入门&#xff09;1.1 题目描述1.2 解题思路1.3 代码实现 2. 删除有序数组中的重复项 II&#xff08;简单&#xff09;2.1 题目描述2.2 解题思路2.3 代码实现 3. 移动零&#xff08;简单&#xff09;3.1 题目描述3.2 代码实…

Hive的时间处理函数from_unixtime和unix_timestamp

一、概述 hive时间处理函数from_unixtime和unix_timestamp的实现以及实例&#xff0c;从而方便后续的时间处理。 二、具体功能实现 1.unix_timestamp(date[, pattern])&#xff1a; 默认的时间格式是yyyy-MM-dd HH:mm:ss&#xff0c;如果日期不是这种格式无法识别&#xff…

【技术选型】clickhouse vs starRocks

比对结论 如果只能单机部署的话&#xff0c;clickhouse基本无敌。 如果集群化&#xff0c;starRocks可以替换clickhouse&#xff0c;但支持的函数会相对少一些&#xff08;clickhouse有不少自定义函数&#xff09; 信息比对 功能clickhousestarRocksjoin大表关联容易OOM对jo…

AQS应用之BlockingQueue详解

概要 AQS全称是 AbstractQueuedSynchronizer&#xff0c;中文译为抽象队列式同步器。BlockingQueue&#xff0c;是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类&#xff0c;它的特性是在任意时刻只有一个线程可以进行take或者put操作&#xff0…