首页 前端知识 详细分析Js中的Promise.all基本知识(附Demo)

详细分析Js中的Promise.all基本知识(附Demo)

2024-06-14 23:06:36 前端知识 前端哥 326 842 我要收藏

目录

  • 1. 基本知识
  • 2. Demo
  • 3. 实战

1. 基本知识

Promise.all 是 JavaScript 中的一个方法,它接受一个由 Promise 对象组成的数组作为参数,并在所有 Promise 对象都变为 resolved(已完成)状态时才返回一个新的 Promise 对象,这个新的 Promise 对象的状态也变为 resolved,其值是一个包含了所有 Promise 对象结果的数组

如果其中任何一个 Promise 对象被 rejected(已拒绝),那么 Promise.all 返回的 Promise 对象的状态就会变为 rejected,第一个被拒绝的 Promise 对象的值会作为这个 Promise 对象的值

主要的作用如下:

  1. 并行执行多个异步操作,并在它们全部完成后执行相应的操作
  2. 可用于等待多个异步任务全部完成后进行后续处理,比如在页面加载时同时加载多个资源

基本的语法如下:Promise.all(iterable);

iterable: 一个可迭代对象,通常是一个包含多个 Promise 对象的数组

2. Demo

一、等待多个异步请求完成后进行处理

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Promise 1 finished'), 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Promise 2 finished'), 2000);
});

Promise.all([promise1, promise2])
  .then(results => {
    console.log(results); // 输出: ["Promise 1 finished", "Promise 2 finished"]
    // 所有异步请求都已完成,可以进行后续操作
  })
  .catch(error => {
    console.error(error);
    // 如果有任何一个 Promise 被 rejected,则会在这里捕获到错误
  });

截图如下:

在这里插入图片描述

二、处理多个异步操作的结果

function fetchUserData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve('User data fetched'), 1500);
  });
}

function fetchPosts() {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve('Posts fetched'), 2000);
  });
}

Promise.all([fetchUserData(), fetchPosts()])
  .then(results => {
    const [userData, posts] = results;
    console.log(userData); // 输出: "User data fetched"
    console.log(posts); // 输出: "Posts fetched"
    // 所有异步请求都已完成,可以进行后续操作
  })
  .catch(error => {
    console.error(error);
    // 如果有任何一个 Promise 被 rejected,则会在这里捕获到错误
  });

三、处理其中一个 Promise 被拒绝的情况

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Promise 1 finished'), 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => reject('Promise 2 failed'), 1500);
});

Promise.all([promise1, promise2])
  .then(results => {
    console.log(results); // 不会执行,因为有一个 Promise 被拒绝
  })
  .catch(error => {
    console.error(error); // 输出: "Promise 2 failed"
    // 只要有一个 Promise 被拒绝,就会在这里捕获到错误
  });

3. 实战

此处实战不可完整执行,只是方便理解

迭代计算多个数值,最后在展示页面显示到折线图中:

在这里插入图片描述

或者时显示在图表中:

在这里插入图片描述

转载请注明出处或者链接地址:https://www.qianduange.cn//article/12139.html
评论
发布的文章

fastjson升级为fastjson2

2024-06-20 09:06:18

protobuf对象与JSON相互转换

2024-06-20 09:06:14

NVM 及 PNPM 安装

2024-06-20 09:06:01

npm有哪些插件包??

2024-06-20 09:06:01

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!