Back to questions
Middle+
2
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
Companies where asked
VK Tech
Answer from AI
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(...) будут выполняться последовательно с задержкой, как и задумано.