理解和使用Promise.all和Promise.race

一、promise.all的使用

  1. 说明
    Promise.all 可以将多个Promise实例包装成一个新的Promise实例,等待所有都完成(或第一个失败)
  2. 返回值
    成功的时候返回的是一个数组,失败的时候则返回先被reject失败状态的值

实例代码如下

let p1 = new Promise((resolve, reject) => {resolve('成功了')
})let p2 = new Promise((resolve, reject) => {resolve('success')
})let p3 = Promse.reject('失败')Promise.all([p1, p2]).then((result) => {console.log(result)               //['成功了', 'success']
}).catch((error) => {console.log(error)
})Promise.all([p1,p3,p2]).then((result) => {console.log(result)
}).catch((error) => {console.log(error)      //  失败的消息
})

代码模拟

let test = (time) => {return new Promise((resolve, reject) => {setTimeout(() => {resolve(`${time / 1000}秒后测试`)}, time)})
}let p1 = test(3000)
let p2 = test(2000)Promise.all([p1, p2]).then((result) => {console.log(result)       // [ '3秒后测试', '2秒后测试' ]
}).catch((error) => {console.log(error)
})

注意

Promise.all 获得的成功结果的数组里面的数据顺序和Promise.all接收到的顺组的顺序是一致的,即 p1的结果在前,即便p1的结果获取的比p2晚。当遇到发送多个请求并根据请求顺序获取和使用数据的场景,Promise.all 毫无疑问解决这个问题。

一、Promise.race的使用

Promise.race([p1,p2,p3])里面哪个结果获得的快,就返回哪个结果,不管结果本身是成功状态还是失败状态

let p1 = new Promise((resolve, reject) => {resolve('success')
})let p2 = new Promise((resolve, reject) => {reject('failed')
})Promise.race([p1, p2]).then((result) => {console.log(result)
}).catch((error) => {console.log(error)  // 打开的是 'failed'
})

至今还没有场景应用到Promise.race

promise.all的使用相关推荐

  1. setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)

    本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...

  2. C++多线程:异步操作std::async和std::promise

    文章目录 std::async 简介 使用案例 std::promise 简介 成员函数 总结 之前的文章中提到了C++多线程中的异步操作机制 C++ 多线程:future 异步访问类(线程之间安全便 ...

  3. ES6中的Promise详解

    Promise 在 JavaScript 中很早就有各种的开源实现,ES6 将其纳入了官方标准,提供了原生 api 支持,使用更加便捷. 定义 Promise 是一个对象,它用来标识 JavaScri ...

  4. 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出

    1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) {if (success){r ...

  5. promise实现多个请求并行串行执行

    早上查资料,偶然发现这个话题,发现自己并不会,于是乎,下来研究了一下. 想想之前我们用jquery写请求的时候,要实现请求的串行执行,我们可能是这么做的. $.ajax({url: '',data: ...

  6. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  7. 自己动手写cpu pdf_自己动手写 Promise

    这段时间在学习Promise,但始终不得要领.为了更好地理解Promise,我决定自己实现一个简易版的Promise,以学习Promise工作原理.该工程名为ToyPromise,仓库地址如下: ht ...

  8. promise 和 async await区别

     什么是Async/Await? async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. as ...

  9. Promise - js异步控制神器

    微信小程序开发交流qq群   581478349    承接微信小程序开发.扫码加微信. 正文: 首先给来一个简单的demo看看Promise是怎么使用的: <!DOCTYPE html> ...

  10. Promise的实例用法

    设定函数 function chiFan() {return new Promise(function(resolve, reject) {console.log("chiFan" ...

最新文章

  1. 浅谈Jquery中的bind()、live()、delegate()、on()绑定事件方式
  2. 持续集成之jenkins基础
  3. staruml无法打开mdj文件_StarUML使用说明
  4. boost::safe_numerics::interval相关的测试程序
  5. BFS——广度优先算法(Breadth First Search)
  6. BMVC2018图像检索论文—使用区域注意力网络改进R-MAC方法
  7. 常见的mysql权限设置
  8. app--查看包名的五种常用方法
  9. 测试视频软件支持的格式,支持82种视频格式!电视平台最强的本地播放器!
  10. 如何下载英文原版书籍资料
  11. sqlserver 建表语句
  12. VRay3.4 for SketchUp之次表面散射材质(3S材质)
  13. 维度表和事实表的区别
  14. 【Java编程】模拟帐户存取和转账操作
  15. #多个基因批量cox 多因素回归cox univariate Adjust for age sex单个基因cox 回归分析 多因素 矫正年龄性别之后的cox回归分析 矫正年龄性别之后的cox生存分析
  16. 2007热点技术职位排行及点析
  17. 排序算法《一》冒泡排序
  18. 根据城市查询经纬度 php,Laravel+Swoole+PHP-ml 实现根据经纬度返回对应城市
  19. linux shell获取当前执行路径
  20. 关于成功的7个小故事

热门文章

  1. python matplotlib 地图_Python数据可视化,看这篇就够了
  2. 发送测试电子邮件消息 响应服务器 550,Microsoft SMTP 服务器在第三方测试中可能显示为能够接受并中继电子邮件...
  3. Qwt开发教程(三)—Qwt常见类简介#F0222
  4. python二分法求最值_数值分析之二分法、试值法 python
  5. c语言void返回什么意思,C语言程序返回值是void什么意思?
  6. 134个治病小偏方,从此不用去医院 - 健康程序员,至尚生活!
  7. html读秒倒计时,jQuery实现读秒倒计时
  8. 缓存和数据库如何保证一致性
  9. Docker搭建STF
  10. PLC张力控制(开环闭环算法分析)