This is now natively supported on the Web.
let { promise, resolve, reject } = Promise.withResolvers();
MDN API Reference