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()的更多相关文章

  1. Promise.all()

    语法:Promise.all(iterable); 参数:iterable 一个可迭代对象,如 Array 或 String. 返回值:如果传入的参数是一个空的可迭代对象,则返回一个已完成(alrea ...

  2. Promise.resolve()与Promise

    //Promise.resolve()和Promise.reject()常用来生成已经被决议为失败或者成功的promise案例 //Promise.reject()简单一些,不管传给它什么值,它决议为 ...

  3. (转载)理解和使用Promise.all和Promise.race

    声明:本文转载自:https://www.jianshu.com/p/7e60fc1be1b2 一.Pomise.all的使用 Promise.all可以将多个Promise实例包装成一个新的Prom ...

  4. Promise的源码实现(完美符合Promise/A+规范)

    Promise是前端面试中的高频问题,我作为面试官的时候,问Promise的概率超过90%,据我所知,大多数公司,都会问一些关于Promise的问题.如果你能根据PromiseA+的规范,写出符合规范 ...

  5. ES6语法(3)—— 用promise()对象优雅的解决异步操作

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果. ...

  6. Promise,Generator(生成器),async(异步)函数

    Promise 是什么 Promise是异步编程的一种解决方案.Promise对象表示了异步操作的最终状态(完成或失败)和返回的结果. 其实我们在jQuery的ajax中已经见识了部分Promise的 ...

  7. 彻底理解Javascript 中的 Promise(-------------------------------***---------------------------------)

    ES6原生提供了 Promise 对象. 到底是何方妖怪呢?打出来看看: 所谓 Promise,就是一个对象,用来传递异步操作的消息.它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个 ...

  8. ES6---new Promise()讲解(尤其注意里面的参数resolve、reject)

    直接打印出来看看吧,console.dir(Promise). 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.cat ...

  9. 答应我,这次必须搞懂!痛点难点Promise。(小点心async/await,基于Promise的更优方案)

    Promise 出现的原因 在 Promise 出现以前,我们处理一个异步网络请求,大概是这样: // 请求 代表 一个异步网络调用. // 请求结果 代表网络请求的响应. 请求1(function( ...

随机推荐

  1. 微信小程序云开发-云存储的应用-识别行驶证

    一.准备工作 1.创建云函数identify 2.云函数identify中index.js代码 1 // 云函数入口文件 2 const cloud = require('wx-server-sdk' ...

  2. SDN与OpenFlow架构--初识

    一,为什么需要SDN 1,传统网络的缺点: a,传统网络及其设备的只可配置,不可编程,只能按照已定义好的协议处理或转发数据,不能适应需求新变化,不能自主开发新功能. 如购买一个电饭煲,可以煮饭,煲汤. ...

  3. webpack 命令行报错“webpack” 不是内部或外部命令的解决方法

    1. NodeJS安装,笔者安装在D盘.安装目录中有两个文件夹node_cache,node_global如下: 2. 配置 npm安装路径,输入如下命令: npm config set prefix ...

  4. 浅谈树模型与集成学习-从决策树到GBDT

    引言   神经网络模型,特别是深度神经网络模型,自AlexNet在Imagenet Challenge 2012上的一鸣惊人,无疑是Machine Learning Research上最靓的仔,各种进 ...

  5. 手把手教你玩转HarmonyOS版地图应用开发

    ​一.导读 7月31日,华为HarmonyOS开发者日将在杭州举行.为了方便更多开发者,高德开放平台地图SDK已在业内率先实现鸿蒙化迁移和重构,全面适配HarmonyOS并面向开发者免费发布.开发者可 ...

  6. SQL修改列名,增加列,删除列语句的写法

    1.修改数据表名 ALTER TABLE [表名.]OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME; 2.修改列名 ALTER TABLE [表名.]TABLE_NAM ...

  7. SimpleDateFormat类的线程安全问题和解决方案

    摘要:我们就一起看下在高并发下SimpleDateFormat类为何会出现安全问题,以及如何解决SimpleDateFormat类的安全问题. 本文分享自华为云社区<SimpleDateForm ...

  8. 一口气说出 Redis 16 个常见使用场景!

    1.缓存 String类型 例如:热点数据缓存(例如报表.明星出轨),对象缓存.全页缓存.可以提升热点数据的访问数据. 文章首发于:http://ht5n8.cn/LEc6v 2.数据共享分布式 St ...

  9. shell $? 状态码含义

    Linux 使用了$? 来保存上个执行的命令的退出状态码. 0                命令成功结束 1                通用未知错误 2                误用she ...

  10. Java异常02——自定义异常

    Error与Exception与自定义异常 Error与Exception Error Exception 自定义异常 快捷键: ctrl + alt + t  package exception.d ...