Асинхронный JavaScriptМикротаски и макротаскиmedium

Cancelable Promise

С помощью стандартных методов промис нельзя отменить. Отмена означает, что промис гарантированно останется в состоянии pending, а колбэки, переданные в then, никогда не выполнятся.

Добавьте статический метод Promise.create, который будет возвращать промис с методом cancel, с помощью которого можно отменить промис.

const promise = Promise.create((resolve, reject) => { setTimeout(() => resolve("ok"), 1000); }); promise.then(value => { console.log(value); // должен быть "ok" через 1000 мс }); setTimeout(() => { promise.cancel(); // но промис не зарезолвится, если мы вызовем cancel быстрее }, 500);