const stc = { delayTimer: {}, sleep: (m, name) => new Promise(r => stc.delayTimer[name] = setTimeout(r, m)), waitClean: async (ms, name)=> { if (stc.delayTimer[name]) clearTimeout(stc.delayTimer[name]); delete stc.delayTimer[name]; return await stc.sleep(ms, name); } } Służy do robienia opóźnienia, ale dodatkowo gdy wywołasz ją ponownie zanim upłynie zadany czas, to czyści licznik i liczy od nowa, nie puszcza funkcji dalej.
async function s (){ console.log("wy"); await stc.waitClean(5000, "mek"); console.log("my"); } np gdy w konsoli odpalać będziesz s() zanim upłynie 5 sekund od poprzedniego odpalenia, to "my" nie będzie się pojawiać. gdy przestaniesz, to dokończy ostatnie liczenie i wyświetli się "my".
@look997: nie mam pojęcia, nie przejmuję się pamięcią w JS, polegam w pełni na GC :P. Jedynie używając RxJS do streamów to dbam aby nie doszło do wycieków pamięci w postaci nieusuniętych observerów, no i tam mam od ręk itakie funkcje jak debounce, delay etc. A bez rxjs do debounców, throtlów użyłbym lodasha, imo nie ma sensu pisać tego ręcznie chyba, że do poćwiczenia/rozkimny
@mcsQ: W sumie, nie interesowałem się loadash. Może i zacznę używać. Oczywiście że dla sportu. Dlatego też wrzuciłem do oceny. (na codereview mi ładnie wypisali co jak).
Co myślicie o takiej funkcji-obiekcie?
const stc = {delayTimer: {},
sleep: (m, name) => new Promise(r => stc.delayTimer[name] = setTimeout(r, m)),
waitClean: async (ms, name)=> {
if (stc.delayTimer[name])
clearTimeout(stc.delayTimer[name]);
delete stc.delayTimer[name];
return await stc.sleep(ms, name);
}
}
Służy do robienia opóźnienia, ale dodatkowo gdy wywołasz ją ponownie zanim upłynie zadany czas, to czyści licznik i liczy od nowa, nie puszcza funkcji dalej.
async function s (){console.log("wy");
await stc.waitClean(5000, "mek");
console.log("my");
}
np gdy w konsoli odpalać będziesz s() zanim upłynie 5 sekund od poprzedniego odpalenia, to "my" nie będzie się pojawiać. gdy przestaniesz, to dokończy ostatnie liczenie i wyświetli się "my".
Co sądzicie? Można to zrobić lepiej?
Komentarz usunięty przez moderatora
Chodzi o formę, bo poprzednia której używałem wymagała osobnej zmiennej itd.
Ale pytam, czy można lepiej?
I jeszcze kwestia, której nie jestem pewien, co się dzieje, gdy kolejne wywołania są zawieszone na
awaiti nigdy nie ruszają dalej?Jak ustawić powiadomienia na maila ze stackoverflow?
Akurat tam to w ogóle w złym miejscu.
Nie jestem pewien, czy GC się tym jest w stanie zająć?
Oczywiście że dla sportu. Dlatego też wrzuciłem do oceny. (na codereview mi ładnie wypisali co jak).