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( ...
随机推荐
- 微信小程序云开发-云存储的应用-识别行驶证
一.准备工作 1.创建云函数identify 2.云函数identify中index.js代码 1 // 云函数入口文件 2 const cloud = require('wx-server-sdk' ...
- SDN与OpenFlow架构--初识
一,为什么需要SDN 1,传统网络的缺点: a,传统网络及其设备的只可配置,不可编程,只能按照已定义好的协议处理或转发数据,不能适应需求新变化,不能自主开发新功能. 如购买一个电饭煲,可以煮饭,煲汤. ...
- webpack 命令行报错“webpack” 不是内部或外部命令的解决方法
1. NodeJS安装,笔者安装在D盘.安装目录中有两个文件夹node_cache,node_global如下: 2. 配置 npm安装路径,输入如下命令: npm config set prefix ...
- 浅谈树模型与集成学习-从决策树到GBDT
引言 神经网络模型,特别是深度神经网络模型,自AlexNet在Imagenet Challenge 2012上的一鸣惊人,无疑是Machine Learning Research上最靓的仔,各种进 ...
- 手把手教你玩转HarmonyOS版地图应用开发
一.导读 7月31日,华为HarmonyOS开发者日将在杭州举行.为了方便更多开发者,高德开放平台地图SDK已在业内率先实现鸿蒙化迁移和重构,全面适配HarmonyOS并面向开发者免费发布.开发者可 ...
- SQL修改列名,增加列,删除列语句的写法
1.修改数据表名 ALTER TABLE [表名.]OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME; 2.修改列名 ALTER TABLE [表名.]TABLE_NAM ...
- SimpleDateFormat类的线程安全问题和解决方案
摘要:我们就一起看下在高并发下SimpleDateFormat类为何会出现安全问题,以及如何解决SimpleDateFormat类的安全问题. 本文分享自华为云社区<SimpleDateForm ...
- 一口气说出 Redis 16 个常见使用场景!
1.缓存 String类型 例如:热点数据缓存(例如报表.明星出轨),对象缓存.全页缓存.可以提升热点数据的访问数据. 文章首发于:http://ht5n8.cn/LEc6v 2.数据共享分布式 St ...
- shell $? 状态码含义
Linux 使用了$? 来保存上个执行的命令的退出状态码. 0 命令成功结束 1 通用未知错误 2 误用she ...
- Java异常02——自定义异常
Error与Exception与自定义异常 Error与Exception Error Exception 自定义异常 快捷键: ctrl + alt + t package exception.d ...