Использовать debounce вместо setTimeout?

146
09 февраля 2019, 16:00

Как переписать на 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) {
   …..
  }
});
Answer 1

Если я правильно понял, что такое 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 
})()

READ ALSO
Передать переменную из Javascript в Django

Передать переменную из Javascript в Django

Всем приветРаботаю над проектом(Фронт js, бэк - Django) На стороне клиента получаю массив, содержащий определенные айди

158
template в component ведет себя очень странно

template в component ведет себя очень странно

Ребят, вопрос очень странно такой задавать, но я негде не нашел никакой информации по поводу этого

198
Создание html элементов в компоненте react.js

Создание html элементов в компоненте react.js

У меня есть компонент, в который через props приходит целое число (каждый раз разное)Вопрос, как создать несколько блоков у компоненте в зависимости...

161