【ES6】Promise.all用法

news/2024/7/11 1:16:38 标签: es6, javascript

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

javascript">const p = Promise.all([p1, p2, p3]);

上面代码中,Promise.all()方法接受一个数组作为参数,p1、p2、p3都是 Promise 实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为 Promise 实例,再进一步处理。另外,Promise.all()方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。

p的状态由p1、p2、p3决定,分成两种情况。

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

下面示例:

1、给各个promise添加catch

javascript">   let x = 10;

    let p1 = new Promise((resolve) => {
        resolve("p1 hello" + x);
    })
        .then((res) => {
            console.log(`p1 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p1 报错了");
            console.log(e);
        });

    let p2 = new Promise((resolve) => {
        resolve("p2 hello" + x);
    })
        .then((res) => {
            console.log(`p2 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p2 报错了");
            console.log(e);
        });

    let p3 = new Promise((resolve) => {
        resolve("p3 hello" + x);
    })
        .then((res) => {
            console.log(`p3 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p3 报错了");
            console.log(e);
        });

    let p4 = new Promise((resolve) => {
        resolve("p4 hello" + x);
    })
        .then((res) => {
            console.log(`p4 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p4 报错了");
            console.log(e);
        });

    Promise.all([p1, p2, p3, p4])
        .then(result => console.log(result))
        .catch((e) => {
            console.log("f*cking man 报错了");
            console.log(e);
        });

输出:
在这里插入图片描述

2、去掉变量x,会报异常,各个Promise中的catch捕捉到对应的异常, Promise.all中的catch不起效:

javascript">  // let x = 10;

    let p1 = new Promise((resolve) => {
        resolve("p1 hello" + x);
    })
        .then((res) => {
            console.log(`p1 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p1 报错了");
            console.log(e);
        });

    let p2 = new Promise((resolve) => {
        resolve("p2 hello" + x);
    })
        .then((res) => {
            console.log(`p2 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p2 报错了");
            console.log(e);
        });

    let p3 = new Promise((resolve) => {
        resolve("p3 hello" + x);
    })
        .then((res) => {
            console.log(`p3 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p3 报错了");
            console.log(e);
        });

    let p4 = new Promise((resolve) => {
        resolve("p4 hello" + x);
    })
        .then((res) => {
            console.log(`p4 then 输出${res}`);
            return res;
        })
        .catch((e) => {
            console.log("p4 报错了");
            console.log(e);
        });

    Promise.all([p1, p2, p3, p4])
        .then(result => console.log(result))
        .catch((e) => {
            console.log("f*cking man 报错了");
            console.log(e);
        });

输出结果:
在这里插入图片描述

3、去掉各个promise的catch:

javascript">    // let x = 10;

    let p1 = new Promise((resolve) => {
        resolve("p1 hello" + x);
    })
        .then((res) => {
            console.log(`p1 then 输出${res}`);
            return res;
        });

    let p2 = new Promise((resolve) => {
        resolve("p2 hello" + x);
    })
        .then((res) => {
            console.log(`p2 then 输出${res}`);
            return res;
        });

    let p3 = new Promise((resolve) => {
        resolve("p3 hello" + x);
    })
        .then((res) => {
            console.log(`p3 then 输出${res}`);
            return res;
        });

    let p4 = new Promise((resolve) => {
        resolve("p4 hello" + x);
    })
        .then((res) => {
            console.log(`p4 then 输出${res}`);
            return res;
        });

    Promise.all([p1, p2, p3, p4])
        .then(result => console.log(result))
        .catch((e) => {
            console.log("f*cking man 报错了");
            console.log(e);
        });

输出结果
在这里插入图片描述


http://www.niftyadmin.cn/n/4990142.html

相关文章

【方案】基于安防监控视频/智能分析网关AI识别技术的防溺水监管

溺水是造成许多人死亡的主要原因之一。无论是在游泳池、河流、湖泊还是海洋中,溺水都可能导致人们失去生命。即使没有造成死亡,溺水所引发的窒息和水下活动中的创伤等伤害,有可能引起长期甚至永久性的身体损伤,对个人和家庭造成巨…

打击儿童性虐待,遭多家机构反对,苹果宣布停止开发CSAM检测计划

据报道,苹果公司曾计划在其iCloud云服务中引入一项儿童性虐待资料(CSAM)检测计划,但由于反对声浪日益高涨,该计划最终宣布停止开发。CSAM检测计划的原本目的是为了帮助阻止儿童性虐待资料的传播,保护儿童的…

DPLL 算法之分裂策略

文章目录 前言深入了解实战 前言 DPLL算法确实是基于树(或二叉树)的回溯搜索算法,它用于解决布尔可满足性问题(SAT问题)。下面我会分析您提到的DPLL算法中的分裂策略,以及它是如何在搜索过程中起作用的。 D…

vue、uniapp中动态添加绑定style、class 9种方法实现

9种方法介绍 直接使用静态class和style属性: 使用场景:当class和style属性是固定不变的时候,可以直接在模板中写死。优点:简单直接,没有额外的计算和逻辑。缺点:无法根据条件动态修改class和style。 使用v…

《人工智能算法图解》书籍分享(包邮送书)

文章目录 人工智能介绍书籍分享抽奖包邮送书 人工智能介绍 人工智能算法是一种能够模拟人类智能行为的计算机算法。它通过分析和处理大量的数据,利用机器学习、深度学习和自然语言处理等技术,实现自主学习、推理和决策的能力。 人工智能算法的发展经历…

【教程】PyTorch Timer计时器

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] OpenCV的Timer计时器可以看这篇:Python Timer和TimerFPS计时工具类 Timer作用说明:统计某一段代码的运行耗时。 直接上代码,开箱即用。 import time import torch import os …

计算机毕设之基于python+echarts+mysql的图书馆可视化管理系统(文档+代码+部署教程)

系统阐述的是一款图书馆可视化管理系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…

力扣88.合并两个有序数组

88. 合并两个有序数组 提示 简单 2.1K 相关企业 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 …