Sobes.tech
Middle+

Implementar a função withTimeout, que aceita uma função e um tempo (milissegundos) e retorna uma nova função. Se a função original não for executada dentro do tempo definido, a promessa deve ser rejeitada.

sobes.tech IA

Resposta da IA

A função withTimeout deve aceitar uma função que retorna uma promessa e um tempo em milissegundos. Ela devolve uma nova função que, ao ser chamada, executa a função original e simultaneamente inicia um temporizador. Se a função original não terminar dentro do tempo estipulado, a promessa é rejeitada com um erro de timeout.

Exemplo de implementação em 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);
        });
    });
  };
}

// Uso:
// const fetchWithTimeout = withTimeout(fetch, 5000);
// fetchWithTimeout('https://example.com').then(...).catch(...);