JS: Создать функцию, которая возвращает функцию, которая при вызове ожидает в течение указанного периода времени перед выполнением - PullRequest
0 голосов
/ 11 июня 2019

Моя цель:

Написать функцию задержки, которая принимает два аргумента, обратный вызов и время ожидания в миллисекундах.Задержка должна возвращать функцию, которая при вызове ждет указанное количество времени перед выполнением.СОВЕТ - исследование setTimeout ();

Я попробовал код ниже:

const delay = (inputFunc, waitTime, ...args) => { 

  return function () {
    return setTimeout(inputFunc(), waitTime, ...args)
  }
}

// UNCOMMENT THE CODE BELOW TO TEST DELAY
let count = 0;

const delayedFunc = delay(() => count++, 1000);
delayedFunc();

console.log(count);                                                  // should print '0'

setTimeout(() => console.log(count), 1000); // should print '1' after 1 second

Я получаю ошибку:

TypeError [ERR_INVALID_CALLBACK]: Callback must be a function at setTimeout (timers.js:390:11)

Что я делаю не так?Каким должен быть ответ?

1 Ответ

2 голосов
/ 11 июня 2019

setTimeout (inputFunc (), waitTime, ... args)

Это означает «немедленно вызвать inputFunc (), а затем передать его результат в качестве первого параметра setTimeout (вместе с waitTime и args)». Вместо этого вы хотите:

setTimeout(inputFunc, waitTime, ...args)  

Другой вариант, особенно если вам нужно выполнить дополнительные действия после истечения времени ожидания, - это создать дополнительную функцию, которая вызовет inputFunc. Например:

setTimeout(() => { 
  // do some cleanup stuff related to delay
  inputFunc();
}, waitTime, ...args);
...