Promise的all方法 和 race方法

Promise的all方法等待所有Promise实例都变为fulfilled状态,而race方法则在第一个Promise变为fulfilled或rejected状态时就结束。文章通过示例解释了这两个方法在处理异步任务时的不同应用场景,如页面加载和选择最快响应的服务。
摘要由CSDN通过智能技术生成

Promise的all方法 和 race方法

Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。

由于 Promise 是 es6 新增加的,所以一些旧的浏览器并不支持,苹果的 Safari 10 和 Windows 的 Edge 14 版本以上浏览器才开始支持 ES6 特性

Promise的三种状态

  1. Pending :异步操作未完成
  2. Fulfilled :异步操作成功
  3. Rejected :异步操作失败

Promise特性:状态凝固特性 只会取其一

我们暂且用setTimeout方法代替异步操作 😂

由于Promise的状态凝固特性,一旦先执行了上面的语句,那就不在执行下面的状态语句,因此Promise也可以说只有两种状态 ,成功或者失败

举个栗子 😄


let pro = new Promise(function (resolve, reject) {
        setTimeout(() => { 
            //  状态凝固特性 只会取其一
            resolve(1000) //执行这个
            reject(2000)
        }, 1000)
    })

    pro.then((res) => {
        console.log("奖励",res)
    }).catch(()=>{
        console.log("没有")
    })

    // 输出 奖励 1000

all方法

假设现在有一个需求,一个页面的不同页面区域返回加载所用的时间不同,那么我们在加载过程中就显示加载画面,直至全部页面都加载完成 ,再给用户呈现页面。

OK,举个栗子 😄


let pro1 = new Promise(function (resolve, reject) {
    setTimeout(() => {
        resolve(1000)
    }, 1000)
})

let pro2 = new Promise(function (resolve, reject) {
    setTimeout(() => {
        resolve(2000)
    }, 2000)
})

let pro3 = new Promise(function (resolve, reject) {
    setTimeout(() => {
        resolve(3000)
    }, 3000)
})

// shuowloading   显示页面加载动画

Promise.all([pro1,pro2,pro3]).then(res=>{

    // hideloading  隐藏页面加载动画

    console.log(res)

}).catch(err=>{
    console.error(err)
})

// 输出   (3) [1000, 2000, 3000]

race方法

哪个返回的最快,就执行哪个
假如说公司很有实力,部署了三台服务器,在此方法写三个服务的url,不同的用户访问,哪个响应的快就用哪个返回的结果

再举个栗子 😄 这是最后一个栗子了 😂


let pro1 = new Promise(function (resolve, reject) {
    setTimeout(() => {
        resolve(1000)
        reject(1)
    }, 1000)
})

let pro2 = new Promise(function (resolve, reject) {
    setTimeout(() => {
        resolve(2000)
    }, 2000)
})

let pro3 = new Promise(function (resolve, reject) {
    setTimeout(() => {
        resolve(3000)
    }, 3000)
})
        
Promise.race([pro1, pro2, pro3]).then(res => {
    // 
    console.log(res)
}).catch(err => {
    console.error(err)
})

// 输出 1000 

文章如有错误,恳请大家提出问题,本人不胜感激。

文章对大家有帮助的话,希望大家能动手点赞鼓励,大家未来一起努力

诸位读者,天生我材必有用,千金散尽还复来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有事没事 敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值