Promise 静态方法:轻松处理多个异步任务

在 JavaScript 中,Promise 是处理异步操作的强大工具。除了基本的 .then().catch() 方法外,Promise 还提供了一系列静态方法,这些方法可以帮助我们更方便地处理多个异步任务。本文将详细介绍这些静态方法,并通过实际案例展示它们的使用场景。

1. Promise.resolve(data)

Promise.resolve(data) 用于将一个值包装成一个状态为 fulfilled 的 Promise 对象。如果传入的值已经是 Promise 对象,则直接返回该 Promise 对象。

javascript 复制代码
const promise = Promise.resolve(42);
promise.then((value) => {
  console.log(value); // 42
});

2. Promise.reject(reason)

Promise.reject(reason) 用于创建一个状态为 rejected 的 Promise 对象。如果传入的值已经是 Promise 对象,则直接返回该 Promise 对象。

javascript 复制代码
const promise = Promise.reject(new Error('出错了'));
promise.catch((error) => {
  console.log(error.message); // "出错了"
});

3. Promise.all(任务数组)

Promise.all(任务数组) 用于处理多个 Promise 对象。它返回一个新的 Promise 对象,该对象在所有输入的 Promise 对象都成功完成时成功,否则失败。

javascript 复制代码
const promises = [Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)];
Promise.all(promises).then((results) => {
  console.log(results); // [1, 2, 3]
});

如果任何一个 Promise 失败,Promise.all 会立即失败,并返回失败的原因。

javascript 复制代码
const promises = [Promise.resolve(1), Promise.reject(new Error('出错了')), Promise.resolve(3)];
Promise.all(promises).then((results) => {
  console.log(results); // 不会执行
}).catch((error) => {
  console.log(error.message); // "出错了"
});

4. Promise.any(任务数组)

Promise.any(任务数组) 用于处理多个 Promise 对象。它返回一个新的 Promise 对象,该对象在任何一个输入的 Promise 对象成功完成时成功,否则失败。

javascript 复制代码
const promises = [Promise.reject(new Error('1')), Promise.resolve(2), Promise.reject(new Error('3'))];
Promise.any(promises).then((result) => {
  console.log(result); // 2
}).catch((error) => {
  console.log(error.message); // 不会执行
});

如果所有 Promise 都失败,Promise.any 会失败,并返回一个包含所有失败原因的数组。

javascript 复制代码
const promises = [Promise.reject(new Error('1')), Promise.reject(new Error('2')), Promise.reject(new Error('3'))];
Promise.any(promises).then((result) => {
  console.log(result); // 不会执行
}).catch((errors) => {
  console.log(errors); // [Error: "1", Error: "2", Error: "3"]
});

5. Promise.allSettled(任务数组)

Promise.allSettled(任务数组) 用于处理多个 Promise 对象。它返回一个新的 Promise 对象,该对象在所有输入的 Promise 对象都已成功,不会失败。

javascript 复制代码
const promises = [Promise.resolve(1), Promise.reject(new Error('2')), Promise.resolve(3)];
Promise.allSettled(promises).then((results) => {
  console.log(results);
  // [
  //   { status: 'fulfilled', value: 1 },
  //   { status: 'rejected', reason: Error: "2" },
  //   { status: 'fulfilled', value: 3 }
  // ]
});

6. Promise.race(任务数组)

Promise.race(任务数组) 用于处理多个 Promise 对象。它返回一个新的 Promise 对象,该对象在任何一个输入的 Promise 对象已决时立即已决,状态和值与第一个已决的 Promise 一致。

javascript 复制代码
const promises = [Promise.resolve(1), Promise.reject(new Error('2')), Promise.resolve(3)];
Promise.race(promises).then((result) => {
  console.log(result); // 1
}).catch((error) => {
  console.log(error.message); // 不会执行
});
相关推荐
芳草萋萋鹦鹉洲哦17 小时前
【tauri+pixijs】关于unicode/ascII/GB2312
前端·tauri·pixijs
木易 士心17 小时前
th-table 中 基于双字段计算的表格列展示方案
前端·javascript·angular.js
fakaifa17 小时前
【全开源】智慧共享农场源码独立版+uniapp前端
前端·uni-app·智慧农场·源码下载·智慧农场小程序·智慧共享农场
toooooop818 小时前
uniapp多个页面监听?全局监听uni.$emit/$on
前端·javascript·uni-app
骨子里的偏爱18 小时前
【案例】uniapp实现内部信息与外部的html网页双向通信的完整的过程,附加完整的代码部分
前端·uni-app·html
爱泡脚的鸡腿18 小时前
uni-app D4 实战(小兔鲜)
前端·vue.js·架构
星火飞码iFlyCode18 小时前
iFlyCode+SpecKit应用:照片等比智能压缩功能实现
前端·javascript
广白18 小时前
钉钉小程序直传文件到 阿里云OSS
前端·vue.js·uni-app
沐怡旸18 小时前
【底层机制】Android图形渲染体系深度解析:VSync信号机制
android·面试
TF男孩18 小时前
写代码不怕Bug,就怕合同里有“竞业陷阱”
面试