Promise.withResolvers 是 ES2024 新增的静态方法,同步创建 pending Promise 及专属 resolve/reject 函数,返回 { promise, resolve, reject } 对象,解构即用,比手动 new Promise 更简洁安全。

Promise.withResolvers 是 JavaScript 中一个较新的静态方法(ES2024 标准),用于**同步创建一个未决的 Promise 及其配套的 resolve 和 reject 函数**,避免手动封装 new Promise((resolve, reject) => {...}) 的冗余写法。
它的返回值是一个对象,包含三个属性
调用 Promise.withResolvers() 会返回一个形如:
你可以用解构语法直接提取三者:
const { promise, resolve, reject } = Promise.withResolvers();
典型使用场景:需要延迟控制 Promise 状态时
比如封装一个可手动完成的异步任务、实现超时取消、或桥接回调式 API:
立即学习“Java免费学习笔记(深入)”;
- 你拿到
promise后可以立即返回或传递给其他函数(它此时处于 pending 状态) - 后续在任意时机调用
resolve(value)或reject(error)来终结该 promise - 无需担心
resolve/reject被意外重用 —— 它们是绑定到这个 promise 的专用函数
对比传统写法,更简洁安全
以前常用:
let resolve, reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
这种写法需手动声明变量、存在变量提升/作用域风险,且容易漏掉 resolve/reject 类型约束。而 withResolvers 一行解构,语义清晰、类型友好(TypeScript 中自动推导)、无副作用。
注意事项
- 目前(截至 2024 年中)Chrome 123+、Firefox 125+、Node.js 21.7+ 原生支持;旧环境需 polyfill(如
promise.with-resolversnpm 包) - 返回的
resolve和reject是普通函数,不绑定 this,可安全传递或存入变量 - 多次调用
resolve或reject只有第一次生效,后续调用被忽略(与原生 Promise 行为一致)


















