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 非常适合需要等待多个不相关异步操作完成的场景,能够显著提高代码执行效率。

相关推荐
山河木马2 分钟前
矩阵专题3-怎么创建投影矩阵(uProjectionMatrix)
javascript·webgl·计算机图形学
泯泷2 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
泯泷2 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
朦胧之2 小时前
页面白屏卡住排查方法
前端·javascript
犇驫聊AI3 小时前
Chrome DevTools MCP + Claude Code 自定义skills生成接口代码生成器
前端·javascript
kyriewen3 小时前
别再这样写 async/await 了:我在 Code Review 中见过最多的 8 个错误
前端·javascript·面试
用户298698530148 小时前
在 React 中使用 JavaScript 将 Excel 转换为 SVG
前端·javascript·react.js
labixiong9 小时前
手写Promise--微任务、静态方法、async/await 全搞懂(三)
前端·javascript
铁皮饭盒10 小时前
3行代码搞定页面截图,Bun.WebView真的简单
javascript
kyriewen1 天前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试