Promise.all、Promise.race、Promise.allSettled、Promise.any区别
目录
1.Promise.all
2.Promise.race
3.Promise.allSettled
4.Promise.any
1.Promise.all
Promise.all()
方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
const p = Promise.all([p1, p2, p3]);
p的状态由p1,p2,p3 决定,分成两种情况。
(1)只有p1
、p2
、p3
的状态都变成fulfilled
,p
的状态才会变成fulfilled
,此时p1
、p2
、p3
的返回值组成一个数组,传递给p
的回调函数。
(2)只要p1
、p2
、p3
之中有一个被rejected
,p
的状态就变成rejected
,此时第一个被reject
的实例的返回值,会传递给p
的回调函数。
{let p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p1--all---执行了")}, 1000);}).then((res) => {console.log(res);})let p2 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p2--all---执行了")}, 1000);}).then((res) => {console.log(res);})let p3 = new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3--all---执行了")reject()}, 1000);}).then((res) => {console.log(res);})Promise.all([p1, p2, p3]).then((res) => {console.log("%cPromise.all执行成功了", "color: green;font-size:22px", res)}).catch((error) => {console.log("%cPromise.all执行失败了", "color: red;font-size:22px",error)})}
或者
{let p1 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p1---执行了")}, 1000);})}let p2 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p2---执行了")}, 1000);})}let p3 = () => {return new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3---执行了")reject("p3---执行失败了")}, 1000);})}Promise.all([p1(), p2(), p3()]).then((res) => {console.log("%cPromise.all执行成功了", "color: green;font-size:16px", res)}).catch((error) => {console.log("%cPromise.all执行失败了", "color: red;font-size:16px",error)})}
2.Promise.race
Promise.race()
方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。
const p = Promise.race([p1, p2, p3]);
上面代码中,只要p1
、p2
、p3
之中有一个实例率先改变状态,p
的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p
的回调函数。
{let p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p1--race---执行了")}, 1000);}).then((res) => {console.log(res);})let p2 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p2--race---执行了")}, 1000);}).then((res) => {console.log(res);})let p3 = new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3--race---执行了")reject()}, 1000);}).then((res) => {console.log(res);})Promise.race([p1, p2, p3]).then((res) => {console.log("%cPromise.race执行成功了", "color: green;font-size:22px", res)}).catch((error) => {console.log("%cPromise.race执行失败了", "color: red;font-size:16px",error)})}
或者
{let p1 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p1---执行了")}, 10000);})}let p2 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p2---执行了")}, 10000);})}let p3 = () => {return new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3---执行了")reject()}, 5000);})}Promise.race([p1(), p2(), p3()]).then((res) => {console.log("%cPromise.race执行成功了", "color: green;font-size:16px", res)}).catch((error) => {console.log("%cPromise.race执行失败了", "color: red;font-size:16px",error)})}
3.Promise.allSettled
Promise.allSettled() 方法返回一个在所有给定的 promise 都已经 fulfilled 或 rejected 后的 promise ,并带有一个对象数组,每个对象表示对应的 promise 结果。
const p = Promise.allSettled([p1, p2, p3]);
{let p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p1--allSettled---执行了")}, 1000);}).then((res) => {console.log(res);})let p2 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p2--allSettled---执行了")}, 1000);}).then((res) => {console.log(res);})let p3 = new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3--allSettled---执行了")reject()}, 1000);}).then((res) => {console.log(res);})Promise.allSettled([p1, p2, p3]).then((res) => {console.log("%cPromise.allSettled执行成功了", "color: green;font-size:22px", res)}).catch((error) => {console.log("%cPromise.allSettled执行失败了","color: red;font-size:16px", error)})
}
或者
{let p1 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p1---执行了")}, 10000);})}let p2 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p2---执行了")}, 1000);})}let p3 = () => {return new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3---执行了")reject("p3---失败了")}, 6000);})}Promise.allSettled([p1(), p2(), p3()]).then((res) => {console.log("%cPromise.allSettled执行成功了", "color: green;font-size:16px", res)}).catch((error) => {console.log("%cPromise.allSettled执行失败了","color: red;font-size:16px", error)})}
4.Promise.any
只要参数实例有一个变成fulfilled
状态,包装实例就会变成fulfilled
状态;如果所有参数实例都变成rejected
状态,包装实例就会变成rejected
状态。
Promise.any()
跟Promise.race()
方法很像,只有一点不同,就是Promise.any()
不会因为某个 Promise 变成rejected
状态而结束,必须等到所有参数 Promise 变成rejected
状态才会结束。
const p = Promise.any([p1, p2, p3]);
{let p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p1--any---执行了")}, 1000);}).then((res) => {console.log(res);})let p2 = new Promise((resolve, reject) => {setTimeout(() => {resolve("p2--any---执行了")}, 1000);}).then((res) => {console.log(res);})let p3 = new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3--any---执行了")reject()}, 1000);}).then((res) => {console.log(res);})Promise.any([p1, p2, p3]).then((res) => {console.log("%cPromise.any执行成功了", "color: green;font-size:22px", res)}).catch((error) => {console.log("%cPromise.any执行失败了","color: red;font-size:16px", error)})}
或者
{let p1 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p1---执行了")}, 10000);})}let p2 = () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve("p2---执行了")}, 6000);})}let p3 = () => {return new Promise((resolve, reject) => {setTimeout(() => {//resolve("p3---执行了")reject()}, 1000);})}Promise.any([p1(), p2(), p3()]).then((res) => {console.log("%cPromise.any执行成功了", "color: green;font-size:16px", res)}).catch((error) => {console.log("%cPromise.any执行失败了","color: red;font-size:16px", error)})}
Promise.all、Promise.race、Promise.allSettled、Promise.any区别相关推荐
- 面试必备--手写Promise.all与.race
最近面试被问到了手写Promise .all 与 Promise.race,奈何没有自己实现过,只能阿巴阿巴 面完之后,冷静下来思考了该如何实现,并把他写了下来(在实现过程中确实收获不少,让我对这两个 ...
- Promise、THEN链的穿透/顺延机制、关于Promise.all/any/race 三个方法的研究、AJAX的串行和并行
文章目录 一.Promise 1.认识Promise Promise的实例肯能由三种状态: Promise原型上的方法: Promise的静态方法: then catch async await 练习 ...
- js之- 简解Promise的resolved,rejected,Promise.all 和Promise.race(知识记录)
1- Promise的三种状态: 1- Pending(等待,未完成,进行中) 2- Resolved(成功) 3- Rejected(失败) 2- Promise的三种状态关系变化只有两种: 1- ...
- promise是什么?简单分析promise原理
预备知识 回调函数 高级函数 发布-订阅模式 promise A+ 规范 promise是什么,能干什么 Promise是异步编程的一种解决方案,它可以解决异步回调地狱的问题,防止层层嵌套对程序代码带 ...
- Promise 原理解析与实现(遵循Promise/A+规范)
1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...
- html form callback,Promise异步编程模式总结初始化Promise对象统一错误处理PromisifyfromCallbackMongoose Promisify...
Promise是JavaScript中的一种异步编程范式, 一个Promise对象表示一个即将完成但还未完成的操作. 鉴于JavaScript中异步和回调的编程风格, Promise模式可以有效地避免 ...
- promise的状态值_ES6中的Promise的用法总结
第一部分.什么是Promise ? Promise是ES6中提供的一个异步编程的解决方案,Promise本身是一个构造函数 typeof Promise //function 一般情况下 我们在开发中 ...
- 什么是Promise,Promise的三种状态,Promise的方法
什么是promise Promise是解决异步编程的一种方案,用同步的写法来进行异步请求,Promise是一个构造函数,用new来创建Promise实例对象,回调函数作为它的参数,该回调函数有两个参数 ...
- 使用promise解决回调地狱_使用Promise 解决回调地狱
const fs = require('fs') function getFileByPath(fpath) { return new Promise(function (resolve, rejec ...
- 实现同步请求_图解 Promise 实现原理(二)—— Promise 链式调用
摘要 很多同学在学习 Promise 时,知其然却不知其所以然,对其中的用法理解不了.本系列文章由浅入深逐步实现 Promise,并结合流程图.实例以及动画进行演示,达到深刻理解 Promise 用法 ...
最新文章
- android开发之动画的详解 整理资料 Android开发程序小冰整理
- 最新的SCI-HUB访问地址
- UE如何使用正则表达式
- python编程基础人民邮电出版社_Python编程基础与应用
- (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- 阿里巴巴消息中间件: Spring Cloud Stream
- IT 行业的创新 - 创新的迷思 (1-4)
- u盘无媒体容量0无卷还能修吗_都2020年了,买新U盘没Type-C接口就过时了
- 苹果mac Dock窗口预览工具:DockView
- 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器
- java导出带图片excel
- HIBERNATE:disjunction和conjunction构造复杂的查询条件.
- vivo信号无服务器,vivo X50上手实测,连央视都夸的国货之光究竟体验如何?
- 使用程序自动调用ANSYS并运行命令流文件
- 物联网实战之基于OneNET的智能农业系统
- 关于VMWare中的vmem文件
- Linux命令学习笔记(一)目录操作
- unbound部署DNS服务器
- Windows Azure实战pdf
- 联想文件服务器推荐配置,联想DS系列存储配置文档(非IBM DS系列)
热门文章
- 布斯乘法 Mips实现 - Booth Algorithm
- 数据库——完整性约束条件
- 唯一约束和主键约束的区别
- 自然语言处理顶会 NAACL 2018 最佳论文、时间检验论文揭晓
- 手把手教你搭建一个直播服务器(Nginx+Rtsp)
- 人工神经网络的优缺点
- postman打不开的解决办法
- HTTPSConnectionPool(host=‘finance.yahoo.com‘, port=443解决方案
- 校验验证码 实现登录验证
- 只学2个月编程能写出什么代码?