zoukankan      html  css  js  c++  java
  • 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(),实现一样的效果:

  • 相关阅读:
    ul 和 ol 标签的相关设置
    程序员送给大学生弟弟的话
    react-dom.js 源码
    什么是 JSX
    The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest C. Xyjj’s sequence(动态规划+欧拉降幂)
    Codeforces Round #584 E2. Rotate Columns (hard version)(状压DP)
    P3343 [ZJOI2015]地震后的幻想乡(概率dp+状压dp)
    Educational Codeforces Round 73 (Rated for Div. 2) D. Make The Fence Great Again
    红蓝字符串 牛客网
    Wannafly挑战赛6 锁
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/13583821.html
Copyright © 2011-2022 走看看