setTimeout внутри Promise или асинхронный debounce и сборщик мусора

Не удалось мне найти внютную инфу по поводу того, будет ли Promise с setTimout'ом удалены из памяти, если не останется ссылки на сам промис?

Вот сам хук:

import { useEffect, useRef } from "react";

export default function useDebounceAsync(fn, delay) {
    const ref = useRef();

    if (!ref.current) {
        let timerId;

        ref.current = {
            cancel() {
                timerId && clearTimeout(timerId);
            },
            wrapper(...args) {
                ref.current.cancel();

                return new Promise((resolve, reject) => {
                    timerId = setTimeout(() => {
                        fn(...args)
                            .then(result => resolve(result))
                            .catch(e => reject(e));
                    }, delay);
                });
            },
        };
    }

    useEffect(() => ref.current.cancel, []);

    return ref.current.wrapper;
}

Сам хук рабочий! Но меня больше тревожит утечка памяти. Она возможно в моём случае? Хотелось бы так же знать, почему возможна или почему нет.


Ответы (0 шт):