Promise.race()
Promise.race([ ])---race竞赛,只要有一个决议了,就返回一个promise实例(对应resolve()或reject( )中参数值; 1、与Promise.all()对应的,还有一个 Promise.race()方法,接受的也是个数组,里面也都是Promise实例。
---数组中有一个promise实例决议为成功或失败,Promise.race()也会决议为成功或失败,将对应的值(参数)传递过来;
2、Promise.race([ ])中数组为空数组,就不会执行,永远挂起;*******与all方法相反;
1、成功时:
//Promise.race( [promise1, promise2]) : Promise
//Promise.race()接收的也都是数组,数组项也都是promise实例,
//只有数组中有一项决议为成功或者失败,Promise.race也会返回对应的成功或者失败,并把值传递过来
//也就是说看决议哪个速度快,就返回的是谁
function getData1(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第一条数据加载成功')
resolve('data1')
},500)
})
}
function getData2(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第二条数据加载成功')
resolve('data2')
},1000)
})
}
function getData3(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第三条数据加载成功')
resolve('data3')
},1000)
})
}
let p = Promise.race( [getData1(), getData2(), getData3() ]);
p.then(data => {
console.log(data) //打印结果为data1
})
打印结果为:

2、如果是reject:
function getData1(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第一条数据加载成功')
reject('err')
},500)
})
}
function getData2(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第二条数据加载成功')
resolve('data2')
},1000)
})
}
function getData3(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第三条数据加载成功')
resolve('data3')
},1000)
})
}
let p = Promise.race( [getData1(), getData2(), getData3() ]);
p.then(data => {
console.log(data)
}, e => {
console.log(e) //打印结果为err
})
打印结果为:

3、如果为空数组
function getData1(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第一条数据加载成功')
reject('err')
},500)
})
}
function getData2(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第二条数据加载成功')
resolve('data2')
},1000)
})
}
function getData3(){
return new Promise( (resolve, reject) => {
setTimeout( () => {
console.log('第三条数据加载成功')
resolve('data3')
},1000)
})
}
let p = Promise.race( [ ]);
p.then(data => {
console.log(data)
}, e => {
console.log(e)
})
打印结果为空:

如果不使用promise.race(),实现一样的效果:

Promise.race()的更多相关文章
- Promise.all()
语法:Promise.all(iterable); 参数:iterable 一个可迭代对象,如 Array 或 String. 返回值:如果传入的参数是一个空的可迭代对象,则返回一个已完成(alrea ...
- Promise.resolve()与Promise
//Promise.resolve()和Promise.reject()常用来生成已经被决议为失败或者成功的promise案例 //Promise.reject()简单一些,不管传给它什么值,它决议为 ...
- (转载)理解和使用Promise.all和Promise.race
声明:本文转载自:https://www.jianshu.com/p/7e60fc1be1b2 一.Pomise.all的使用 Promise.all可以将多个Promise实例包装成一个新的Prom ...
- Promise的源码实现(完美符合Promise/A+规范)
Promise是前端面试中的高频问题,我作为面试官的时候,问Promise的概率超过90%,据我所知,大多数公司,都会问一些关于Promise的问题.如果你能根据PromiseA+的规范,写出符合规范 ...
- ES6语法(3)—— 用promise()对象优雅的解决异步操作
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果. ...
- Promise,Generator(生成器),async(异步)函数
Promise 是什么 Promise是异步编程的一种解决方案.Promise对象表示了异步操作的最终状态(完成或失败)和返回的结果. 其实我们在jQuery的ajax中已经见识了部分Promise的 ...
- 彻底理解Javascript 中的 Promise(-------------------------------***---------------------------------)
ES6原生提供了 Promise 对象. 到底是何方妖怪呢?打出来看看: 所谓 Promise,就是一个对象,用来传递异步操作的消息.它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个 ...
- ES6---new Promise()讲解(尤其注意里面的参数resolve、reject)
直接打印出来看看吧,console.dir(Promise). 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.cat ...
- 答应我,这次必须搞懂!痛点难点Promise。(小点心async/await,基于Promise的更优方案)
Promise 出现的原因 在 Promise 出现以前,我们处理一个异步网络请求,大概是这样: // 请求 代表 一个异步网络调用. // 请求结果 代表网络请求的响应. 请求1(function( ...
随机推荐
- MySql存储过程的创建与使用及在thinkphp中如何调用笔记
学习sql的存储过程,笔记总结如下: MySQL默认将分号,即";"作为语句的分隔符.如果是这样的话,则一个存储过程将很难正常创建,因为它的BEGIN和END之间可以是任意数量的S ...
- SQlL 中 where 1=1
提升某种执行效率? 其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以. 这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的. 如:web界面查询 ...
- C++第四十三篇 -- VS2017创建控制台程序勾选MFC类库
用VS2017创建EXE带MFC类库方法 1. File --> New --> Project 2. Windows桌面向导 3. 勾选MFC类库 4. 创建成功 如果项目编译出错 1. ...
- 第十四篇 -- QMainWindow与QAction(清空-全选-撤销-重做-关闭-语言选择)
效果图: 这次添加了关闭-撤销-重做-全选-清空等功能,并添加了字体和字体大小选择.基本方法跟前面几篇类似. ui_mainWindow.py # -*- coding: utf-8 -*- # Fo ...
- python中进程详解
1:pdb调试:基于命令行的调试工具,非常类似gnu和gdb调试,以下是常用的调试命令: 可以python -m pdb xxx.py(你的py文件名)进入命令行调试模式 命令 简写命令 作用 bea ...
- Java大整形BigInteger的用法
基本类型int有32位,范围是:[-2147483648, 2147483647](正负21亿多) 基本类型long有64位,范围是:[-9223372036854775808, 9223372036 ...
- Vulnhub -- DC3靶机渗透
@ 目录 信息收集 尝试攻击 获取shell方法1 获取shell方法2 获取shell方法3 拿到root权限 拿FLAG 总结 信息收集 kali的ip为192.168.200.4,扫描出一个IP ...
- CRT(中国剩余定理)学习笔记
先扔个模板题.链接. 简化题意:他让我求 \(x \equiv a_i \pmod{m_i}\) 的解. 例如,\( \begin{cases} x \equiv 1 \pmod{3} \\ x \e ...
- 打造自己的Vue组件文档生成工具
程序员最讨厌的两件事情,第一种是写文档,另一种是别人没有写文档.有没有直接根据vue组件生成文档的呢?当然是有的的.但第三方使用起来不一定能和现有项目结合使用,往往需要额外的注释用来标记提取信息.使用 ...
- Arp欺骗和DNS投毒
中间人攻击 ARP缓存攻击 ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址.简单来说,就 ...