В начале 2024 в js завезли удобный хелпер: при работе с промисами, которые нужно контролировать снаружи, теперь можно не городить внешние переменные и перекладывать в них колбеки. Теперь есть Promise.withResolvers:

const { promise, resolve, reject } = Promise.withResolvers();

Создаёт промис и возвращает от него методы для resolve и reject. Так что теперь не нужно выворачивать логику.

Было:

let outerResolve;
let outerReject;

const promise = new Promise((resolve, reject) => {
  outerResolve = resolve;
  outerReject = reject;
});

promise
    .then((resolvedValue) => { console.log(resolvedValue); })
    .catch((rejectedValue) => { console.error(rejectedValue); });

...
outerResolve("Resolved!");

А теперь можно написать чище, без “перекладывательной” логики:

const { promise, resolve, reject } = Promise.withResolvers();

promise
    .then((resolvedValue) => { console.log(resolvedValue); })
    .catch((rejectedValue) => { console.error(rejectedValue); });

...
outerResolve("Resolved!");

И полифилится эта штука элементарно. Надо брать!