目录

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)只有p1p2p3的状态都变成fulfilledp的状态才会变成fulfilled,此时p1p2p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1p2p3之中有一个被rejectedp的状态就变成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]);

上面代码中,只要p1p2p3之中有一个实例率先改变状态,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区别相关推荐

  1. 面试必备--手写Promise.all与.race

    最近面试被问到了手写Promise .all 与 Promise.race,奈何没有自己实现过,只能阿巴阿巴 面完之后,冷静下来思考了该如何实现,并把他写了下来(在实现过程中确实收获不少,让我对这两个 ...

  2. Promise、THEN链的穿透/顺延机制、关于Promise.all/any/race 三个方法的研究、AJAX的串行和并行

    文章目录 一.Promise 1.认识Promise Promise的实例肯能由三种状态: Promise原型上的方法: Promise的静态方法: then catch async await 练习 ...

  3. js之- 简解Promise的resolved,rejected,Promise.all 和Promise.race(知识记录)

    1- Promise的三种状态: 1- Pending(等待,未完成,进行中) 2- Resolved(成功) 3- Rejected(失败) 2- Promise的三种状态关系变化只有两种: 1- ...

  4. promise是什么?简单分析promise原理

    预备知识 回调函数 高级函数 发布-订阅模式 promise A+ 规范 promise是什么,能干什么 Promise是异步编程的一种解决方案,它可以解决异步回调地狱的问题,防止层层嵌套对程序代码带 ...

  5. Promise 原理解析与实现(遵循Promise/A+规范)

    1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...

  6. html form callback,Promise异步编程模式总结初始化Promise对象统一错误处理PromisifyfromCallbackMongoose Promisify...

    Promise是JavaScript中的一种异步编程范式, 一个Promise对象表示一个即将完成但还未完成的操作. 鉴于JavaScript中异步和回调的编程风格, Promise模式可以有效地避免 ...

  7. promise的状态值_ES6中的Promise的用法总结

    第一部分.什么是Promise ? Promise是ES6中提供的一个异步编程的解决方案,Promise本身是一个构造函数 typeof Promise //function 一般情况下 我们在开发中 ...

  8. 什么是Promise,Promise的三种状态,Promise的方法

    什么是promise Promise是解决异步编程的一种方案,用同步的写法来进行异步请求,Promise是一个构造函数,用new来创建Promise实例对象,回调函数作为它的参数,该回调函数有两个参数 ...

  9. 使用promise解决回调地狱_使用Promise 解决回调地狱

    const fs = require('fs') function getFileByPath(fpath) { return new Promise(function (resolve, rejec ...

  10. 实现同步请求_图解 Promise 实现原理(二)—— Promise 链式调用

    摘要 很多同学在学习 Promise 时,知其然却不知其所以然,对其中的用法理解不了.本系列文章由浅入深逐步实现 Promise,并结合流程图.实例以及动画进行演示,达到深刻理解 Promise 用法 ...

最新文章

  1. android开发之动画的详解 整理资料 Android开发程序小冰整理
  2. 最新的SCI-HUB访问地址
  3. UE如何使用正则表达式
  4. python编程基础人民邮电出版社_Python编程基础与应用
  5. (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
  6. 阿里巴巴消息中间件: Spring Cloud Stream
  7. IT 行业的创新 - 创新的迷思 (1-4)
  8. u盘无媒体容量0无卷还能修吗_都2020年了,买新U盘没Type-C接口就过时了
  9. 苹果mac Dock窗口预览工具:DockView
  10. 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器
  11. java导出带图片excel
  12. HIBERNATE:disjunction和conjunction构造复杂的查询条件.
  13. vivo信号无服务器,vivo X50上手实测,连央视都夸的国货之光究竟体验如何?
  14. 使用程序自动调用ANSYS并运行命令流文件
  15. 物联网实战之基于OneNET的智能农业系统
  16. 关于VMWare中的vmem文件
  17. Linux命令学习笔记(一)目录操作
  18. unbound部署DNS服务器
  19. Windows Azure实战pdf
  20. 联想文件服务器推荐配置,联想DS系列存储配置文档(非IBM DS系列)

热门文章

  1. 布斯乘法 Mips实现 - Booth Algorithm
  2. 数据库——完整性约束条件
  3. 唯一约束和主键约束的区别
  4. 自然语言处理顶会 NAACL 2018 最佳论文、时间检验论文揭晓
  5. 手把手教你搭建一个直播服务器(Nginx+Rtsp)
  6. 人工神经网络的优缺点
  7. postman打不开的解决办法
  8. HTTPSConnectionPool(host=‘finance.yahoo.com‘, port=443解决方案
  9. 校验验证码 实现登录验证
  10. 只学2个月编程能写出什么代码?