Middle+
Υλοποιήστε τη λειτουργία withTimeout, η οποία λαμβάνει μια λειτουργία και χρόνο (σε χιλιοστά του δευτερολέπτου) και επιστρέφει μια νέα λειτουργία. Αν η αρχική λειτουργία δεν εκτελεστεί εντός του καθορισμένου χρόνου, η υπόσχεση πρέπει να απορριφθεί.
sobes.tech AI
Απάντηση από AI
Функция withTimeout должна принимать функцию, которая возвращает промис, и время в миллисекундах. Она возвращает новую функцию, которая при вызове запускает исходную функцию и одновременно таймер. Если исходная функция не успевает завершиться за заданное время, промис отклоняется с ошибкой таймаута.
Пример реализации на JavaScript:
function withTimeout(fn, ms) {
return function(...args) {
return new Promise((resolve, reject) => {
const timer = setTimeout(() => {
reject(new Error('Timeout'));
}, ms);
fn(...args)
.then(result => {
clearTimeout(timer);
resolve(result);
})
.catch(err => {
clearTimeout(timer);
reject(err);
});
});
};
}
// Использование:
// const fetchWithTimeout = withTimeout(fetch, 5000);
// fetchWithTimeout('https://example.com').then(...).catch(...);