79152641

Date: 2024-11-03 11:53:20
Score: 0.5
Natty:
Report link

The addEventListener() method accepts an optional object of options as its third argument. If you set the signal property, you can remove all event listeners.

/**
 * 
 * @param {number} delay 
 * @param {AbortSignal} [abortSignal]
 * @returns {Promise<void>}
 */
export default function timeoutPromise(delay, abortSignal) {
    return new Promise((resolve, reject) => {
        if(abortSignal) {
            abortSignal.throwIfAborted();
        }

        const clearController = new AbortController();

        const timeout = setTimeout(() => {
            clearController.abort();
            resolve();
        }, delay);

        abortSignal.addEventListener("abort", () => {
            clearController.abort();
            clearTimeout(timeout);
            reject(new Error("Aborted"));
        }, {
            signal: clearController.signal
        });
    });
}
Reasons:
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Unregistered user (0.5):
  • Low reputation (1):
Posted by: Alexey