JavaScript Promise 的常用API

1. 静态方法
Promise.resolve(value)

创建一个已解决的Promise,返回的Promise状态为fulfilled,并带有给定的值。(创建一个已解决的 Promise)

javascript 复制代码
Promise.resolve(1).then(console.log); // 1

Promise.reject(reason)

创建一个已拒绝的Promise,返回的Promise状态为rejected,并带有给定的拒绝原因。(创建一个已拒绝的 Promise)

javascript 复制代码
Promise.reject(new Error('error')).catch(e => console.log(e.message)); // error

Promise.all(iterable)

接受一个可迭代对象(如数组),并返回一个新的Promise。当所有Promise都成功时,返回的Promise才成功,成功值是所有Promise成功值的数组;如果有一个失败,则返回的Promise立即失败,失败原因是第一个失败的Promise的原因。(等待所有 Promise 完成<所有成功或一个失败>)

适用场景:当需要并行执行多个异步任务,并在所有任务都完成时执行某个操作。

javascript 复制代码
Promise.all([
  Promise.resolve(1),
  Promise.resolve(2)
]).then(console.log); // [1, 2]

Promise.allSettled(iterable)

接受一个可迭代对象,并返回一个新的Promise。当所有Promise都已解决(无论是成功还是失败)时,返回的Promise成功,成功值是一个对象数组,每个对象表示对应Promise的结果。每个对象都有status属性,值为'fulfilled'或'rejected',如果为'fulfilled',则还有value属性;如果为'rejected',则还有reason属性。(等待所有 Promise 完成<无论成功或失败>)

适用场景:当你想获取所有 Promise 的结果,无论它们是否成功,都适合使用。它将返回每个 Promise 的状态和结果或失败原因。

javascript 复制代码
Promise.allSettled([
  Promise.resolve(1),
  Promise.reject(new Error('error'))
]).then(console.log);
// 输出: [
//   { status: 'fulfilled', value: 1 },
//   { status: 'rejected', reason: Error: error }
// ]

Promise.any(iterable)

接受一个可迭代对象,并返回一个新的Promise。当其中任何一个Promise成功时,返回的Promise就成功,成功值是第一个成功的Promise的成功值;如果所有Promise都失败,则返回的Promise失败,失败原因是一个AggregateError,包含所有失败原因。(等待第一个成功的 Promise)

适用场景:适用于希望在多个异步操作中找到第一个成功的结果的场景。

javascript 复制代码
Promise.any([
  Promise.reject(new Error('error1')),
  Promise.resolve(2)
]).then(console.log); // 2

Promise.race(iterable)

接受一个可迭代对象,并返回一个新的Promise。返回的Promise的状态和值与可迭代对象中第一个改变状态的Promise相同。(等待第一个完成的 Promise<无论成功或失败>)

适用场景:返回第一个完成的 Promise(无论是成功还是失败)。

javascript 复制代码
Promise.race([
  new Promise(resolve => setTimeout(() => resolve(1), 100)),
  new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 50))
]).catch(e => console.log(e.message)); // timeout

2. 实例方法
Promise.prototype.then(onFulfilled, onRejected)

为Promise添加成功和失败的回调函数,返回一个新的Promise。onFulfilled在Promise成功时被调用,接收成功值;onRejected在Promise失败时被调用,接收失败原因。如果传入的回调函数返回一个值,则返回的Promise以该值解决;如果抛出错误,则返回的Promise以该错误拒绝。(添加解决和拒绝回调)

Promise.prototype.catch(onRejected)

为Promise添加失败的回调函数,返回一个新的Promise。相当于.then(null, onRejected)。(添加拒绝回调)

Promise.prototype.finally(onFinally)

为Promise添加一个回调函数,无论Promise成功还是失败,该回调函数都会在Promise解决后被调用。返回一个新的Promise,其状态和值与原始Promise相同。(添加最终回调)

javascript 复制代码
// 实例方法示例
const p = new Promise((resolve, reject) => {
  resolve(1);
});

p.then(value => {
  console.log(value); // 1
  return value + 1;
}).then(value => {
  console.log(value); // 2
});

p.catch(error => {
  console.log(error);
});

p.finally(() => {
  console.log('finally');
});
相关推荐
weixin_4935036720 分钟前
Vue3 前端生成 PDF:会员证书与活动签到表的三种打印方案与踩坑记录
前端·pdf·状态模式
傻啦嘿哟1 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670791 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
李少兄2 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh2 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei3 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界3 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
尾善爱看海3 小时前
前端算法与手写题集
前端·算法
徐小夕4 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
繁星蓝雨4 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进