Sobes.tech
Назад к вопросам
Middle+
1

function delayFunc(fn, delay) { return function c(...args) { return new Promise((resolve) => { setTimeout(() => { fn(...args) }, delay * 1000) }) } } function sum(a, b) { console.log(a + b) } const delayedSum = delayFunc(sum, 5); await delayedSum(3, 2); //спустя 5 секунд выведет 5 await delayedSum(5, 3); //спустя 5 секунд после предыдущего выведет 8

Компании, где спрашивали
VK Tech

Ответ от нейросети

sobes.tech AI

В представленном коде функция delayFunc создаёт обёртку вокруг переданной функции fn, которая вызывает её с задержкой delay секунд.

Однако, в текущей реализации Promise внутри delayFunc не вызывает resolve, поэтому await никогда не дождётся завершения, и задержка не будет работать как ожидается.

Правильная реализация должна вызывать resolve после выполнения fn, чтобы промис завершался:

function delayFunc(fn, delay) {
  return function c(...args) {
    return new Promise((resolve) => {
      setTimeout(() => {
        fn(...args);
        resolve();
      }, delay * 1000);
    });
  };
}

function sum(a, b) { console.log(a + b); }

const delayedSum = delayFunc(sum, 5);

(async () => {
  await delayedSum(3, 2); // спустя 5 секунд выведет 5
  await delayedSum(5, 3); // спустя ещё 5 секунд выведет 8
})();

Таким образом, вызовы await delayedSum(...) будут выполняться последовательно с задержкой, как и задумано.