zl程序教程

您现在的位置是:首页 >  其它

当前栏目

ES2020之Promise.allSettled

Promise
2023-09-11 14:19:18 时间

文章目录

专栏目录请点击

简介

在Promise对象上面一共提供了很多组合方法供我们使用,他们都接受多个promise对象,然后返回一个表示组合结果的新的promise,依据传入的promise的结果状态,返回的新的promise切换为不同的状态

常用方法

他们的参数都是一个promise数组

  1. promise.all:返回一个组合后的promise,当传入的所有的promise全部转化为fulfill状态的时候,组合后的promise也会变为fulfill状态。但是如果有一个promise的状态为rejected状态,那么返回的组合后的promise也是rejected状态
  2. promise.race返回一个组合后的promise,当传入的promise有任意一个切换为fulfill状态或rejected状态的时候,改promise将会立即切换为相同的状态
  3. promise.allSettled:返回一个组合后的promise,当多有的promise全部切换为fulfilled状态或者rejected状态时。改promise将切换为fulfilled状态(当所有的异步全部执行完后,返回的promise就会变为fulfilled状态)
  4. promise.any:返回一个组合后的promise,当传入的promise状态有一个是fulfilled状态的时候,他会立即变为fulfilled状态

例子

我们执行下面的代码

const async1 = () => {
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            resolve("hello")
        },2000)
    })
}


const async2 = () => {
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            reject("world")
        },2000)
    })
}

const async3 = async () => {
    const result = await Promise.allSettled([async1(),async2()])
    console.log(result);
    console.log(result.length);
    return result
}

async3()

打印如下

在这里插入图片描述

  1. 我们会发现他们最终拿到的是一个数组,数组内是每一个promise执行的结果
  2. 引入返回的是一个数组,我们可以通过数组的方法找出执行成功或者失败的promise
// 获取所有 fulfilled 状态的结果信息
results.filter( result => result.status === "fulfilled" )
// 获取所有 rejected 状态的结果信息
results.filter( result => result.status === "rejected" )