Как переписать на debounce вместо setTimeout?
Нужно наверное чтобы debounce возвращал промис
https://lodash.com/docs/4.17.10#debounce
Поведение должно быть аналогично этому https://codesandbox.io/s/wy7z7q5zx5 с интервалом 300 mc
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const asyncValidation = memoize( async value => {
await sleep(500);
try {
…..
} catch (err) {
…..
}
});
Если я правильно понял, что такое debounce:
const debounce = (fn, ms) => {
let dfn = (...args) => {
let rest = +dfn.next - Date.now();
dfn.next = (dfn.next ? dfn.next : Date.now()) + ms;
setTimeout(() => fn(...args), rest > 0 ? rest + ms : ms);
}
return dfn;
}
let fn = debounce(
i => console.log(i, Date.now()),
200
);
for (let i = 1; i <= 30; ++i) {
setTimeout(() => fn(i))
}
console.log(30, 'calls queued');
То попробую угадать что Вам нужно от sleep:
const debounce = (fn, ms) => {
let dfn = (...args) => {
let rest = +dfn.next - Date.now();
dfn.next = (dfn.next ? dfn.next : Date.now()) + ms;
return new Promise(ok =>
setTimeout(
() => ok(fn(...args)),
rest > 0 ? rest + ms : ms
));
}
return dfn;
}
const getSleep = ms => debounce(
() => Promise.resolve(),
ms
);
const sleep = getSleep(200);
(async() => {
let start = Date.now();
await sleep();
await sleep();
await sleep();
await Promise.all([sleep(), sleep(), sleep()]);
console.log(`wake up after ${Date.now() - start}ms`); // 1200ms = 200 * 6
})()
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости