ECMAScript proposal: Promise.withResolvers()
在这篇博客文章中,作者介绍了 ECMAScript 2024 的一个新特性——Promise.withResolvers(),这是一种直接创建 Promises 的新方法,可作为 new Promise(...) 的替代品。
new Promise(...)
- 显露构造器模式此前,只有一种方式可以直接创建 Promise:
const promise = new Promise((resolve, reject) => {
// ...
});
Promise.withResolvers()
然而,显露构造器模式的局限性在于结束函数 resolve 和 reject 不能离开 Promise 构造器回调而单独使用。这个静态工厂方法解决了这个问题:
const { promise, resolve, reject } = Promise.withResolvers();
以下是使用该工厂方法的例子:
{
const { promise, resolve, reject } = Promise.withResolvers();
resolve('fulfilled');
await promise; // 'fulfilled'
}
{
const { promise, resolve, reject } = Promise.withResolvers();
reject('rejected');
await promise; // 抛出 'rejected'
}
最后,该提案指出,许多代码库实现了这一功能,这是它现在被构建进语言中的好消息:React、Vue、Axios、TypeScript、Vite 和 Deno 的标准库等。