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;
}
Сам хук рабочий! Но меня больше тревожит утечка памяти. Она возможно в моём случае? Хотелось бы так же знать, почему возможна или почему нет.