Promise 包含的属性

实例属性

  1. Promise.prototype.constructor - 创建实例对象的构造函数

  2. Promise.prototypeSymbol.toStringTag - 用于 Object.prototype.toString(),值为 "Promise"

实例方法

  1. then(onFulfilled, onRejected) - 附加兑现和拒绝处理器,返回新 Promise

  2. catch(onRejected) - 附加拒绝处理回调函数,返回新 Promise

  3. finally(onFinally) - 附加处理器,无论 Promise 状态如何都会执行

静态属性

  1. PromiseSymbol.species - 返回用于构造返回值的原生构造函数

静态方法

javascript 复制代码
async function getData() {
  const [users, posts, comments] = await Promise.all([
    fetchUsers(),
    fetchPosts(), 
    fetchComments()
  ]);
  return { users, posts, comments };
}

Promise.all 非常适合需要等待多个不相关异步操作完成的场景,能够显著提高代码执行效率。

使用示例

javascript 复制代码
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, "foo");
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values); // [3, 42, "foo"]
});

错误处理

javascript 复制代码
const p1 = Promise.resolve(33);
const p2 = Promise.reject(new Error("失败"));

Promise.all([p1.catch(err => err), p2.catch(err => err)])
  .then(values => {
    console.log(values[0]); // 33
    console.log(values[1]); // Error: 失败
  });
  1. Promise.all(iterable) - 等待所有 Promise 完成

  2. Promise.allSettled(iterable) - 等待所有 Promise settled

  3. Promise.any(iterable) - 等待任一 Promise 兑现

  4. Promise.race(iterable) - 等待第一个 settled 的 Promise

  5. Promise.resolve(value) - 返回已解决的 Promise

  6. Promise.reject(reason) - 返回已拒绝的 Promise

  7. Promise.try(callback) - 包装任意回调函数结果为 Promise

  8. Promise.withResolvers() - 返回包含 Promise 和 resolve/reject 函数的对象

    Promise.all 详解

    基本语法

    javascript 复制代码
    Promise.all(iterable)

    特点

  9. 并发执行:同时处理多个异步操作

  10. 快速失败:任一 Promise 拒绝则立即拒绝

  11. 顺序保持:结果数组顺序与输入 Promise 顺序一致

Promise.all 非常适合需要等待多个不相关异步操作完成的场景,能够显著提高代码执行效率。

相关推荐
fqbqrr5 小时前
2606C++,C++构的多态
开发语言·c++
biter down6 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
threelab7 小时前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
武器大师727 小时前
lv_binding_js 代码解读
开发语言·javascript·ecmascript
不知名的老吴7 小时前
线程的生命周期之线程“插队“
java·开发语言·python
kaikaile19958 小时前
数字全息图处理系统(C# 实现)
开发语言·c#
Patrick_Wilson9 小时前
router.replace 之后紧跟 reload,页面为什么无限刷新?
javascript·react.js·浏览器
秋99 小时前
Go语言(Golang)开发工程师全景解析:岗位职责·语言优势与使用场景·各城市薪资·发展前景·高考志愿填报(2026版)
开发语言·golang·高考
mONESY10 小时前
JavaScript 栈、队列、数组与链表核心知识点总结
javascript·面试