首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不同类型的数组上使用Promise.all()?

Promise.all() 是 JavaScript 中的一个方法,用于处理多个 Promise 对象。当所有传入的 Promise 都成功地完成(fulfilled)时,它将返回一个新的 Promise,该 Promise 将解析为一个包含所有成功完成的 Promise 结果的数组。如果任何一个 Promise 被拒绝(rejected),则 Promise.all() 立即被拒绝,并返回第一个被拒绝的 Promise 的错误。

基础概念

  • Promise: 表示一个异步操作的最终完成(或失败)及其结果值的状态。
  • Promise.all(): 接受一个 Promise 对象的数组作为参数,当所有 Promise 都成功完成时,返回一个新的 Promise,该 Promise 解析为一个包含所有 Promise 结果的数组。

类型

Promise.all() 可以接受不同类型的数组,包括:

  • 普通对象数组
  • 基本数据类型数组
  • Promise 对象数组

应用场景

当你需要并行执行多个异步操作,并且只有在所有操作都完成后才继续执行下一步时,可以使用 Promise.all()

示例代码

以下是一些不同类型的数组上使用 Promise.all() 的示例:

1. 基本数据类型数组

代码语言:txt
复制
const promises = [
  Promise.resolve(1),
  Promise.resolve(2),
  Promise.resolve(3)
];

Promise.all(promises)
  .then(results => {
    console.log(results); // [1, 2, 3]
  })
  .catch(error => {
    console.error(error);
  });

2. 普通对象数组

代码语言:txt
复制
const promises = [
  Promise.resolve({ id: 1, name: 'Alice' }),
  Promise.resolve({ id: 2, name: 'Bob' }),
  Promise.resolve({ id: 3, name: 'Charlie' })
];

Promise.all(promises)
  .then(results => {
    console.log(results); // [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' }]
  })
  .catch(error => {
    console.error(error);
  });

3. 混合类型数组

代码语言:txt
复制
const promises = [
  Promise.resolve(1),
  Promise.resolve({ id: 2, name: 'Bob' }),
  Promise.resolve(3)
];

Promise.all(promises)
  .then(results => {
    console.log(results); // [1, { id: 2, name: 'Bob' }, 3]
  })
  .catch(error => {
    console.error(error);
  });

遇到的问题及解决方法

问题:如果数组中的某个 Promise 被拒绝,Promise.all() 会立即被拒绝。

代码语言:txt
复制
const promises = [
  Promise.resolve(1),
  Promise.reject(new Error('Error in promise 2')),
  Promise.resolve(3)
];

Promise.all(promises)
  .then(results => {
    console.log(results);
  })
  .catch(error => {
    console.error(error); // Error: Error in promise 2
  });

解决方法:可以使用 Promise.allSettled() 来处理这种情况,它会等待所有 Promise 完成,无论它们是成功还是失败。

代码语言:txt
复制
const promises = [
  Promise.resolve(1),
  Promise.reject(new Error('Error in promise 2')),
  Promise.resolve(3)
];

Promise.allSettled(promises)
  .then(results => {
    console.log(results);
    // [
    //   { status: 'fulfilled', value: 1 },
    //   { status: 'rejected', reason: Error: Error in promise 2 },
    //   { status: 'fulfilled', value: 3 }
    // ]
  });

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

6分33秒

048.go的空接口

3分39秒

035.go的类型定义和匿名结构体

7分8秒

059.go数组的引入

5分5秒

纯血鸿蒙HarmonyOS Next5 ArkUi聊天app实例演示

9分12秒

034.go的类型定义和类型别名

14分12秒

050.go接口的类型断言

6分7秒

070.go的多维切片

5分51秒

067_如何处理各种可能的异常_try_except_Error

238
11分2秒

变量的大小为何很重要?

6分36秒

066_如何捕获多个异常_try_否则_else_exception

281
1时29分

企业出海秘籍:如何以「稳定」产品提升留存,以AIGC「创新」实现全球增长?

4分32秒

060_汉语拼音变量名_蛇形命名法_驼峰命名法

354
领券