Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

164
Visualizações
setTimeout y alcance en javascript

Estoy jugando con setTimeout y no obtengo los resultados que esperaba. Tengo una matriz con el nombre de autos, y tengo una función llamada fetchCars que simplemente llama a setTimeout y devuelve los autos después de 1000 ms. Por lo que sé, setTimeout debería tener acceso a la matriz de autos debido a los cierres, pero por alguna razón, cuando espero una invocación de fetchCars, no obtengo ningún resultado.

Aquí hay una caja de arena Aquí está mi código:

 const cars = [ { brand: "Toyota", model: "Camry", year: "2014" }, { brand: "BMW", year: "2016", model: "M3" }, { brand: "Porche", model: "911", year: "2018" } ]; export const fetchCars = async () => { setTimeout(() => { return cars; }, 1000); }; const recieveCars = async () => { const cars = await fetchCars(); console.log(cars); }; recieveCars(); ///Console Output: undefined
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

La razón por la que está viendo undefined en su consola es que fetchCars devuelve una Promesa (solo en virtud de que la ha etiquetado con async ) que se resuelve como indefinido; en otras palabras, ¡realmente no devuelve nada!

 export const fetchCars = async () => { setTimeout(() => { // the callback you have passed to setTimeout will return cars, not the fetchCars function return cars; }, 1000); };

Si desea que fetchCars devuelva un valor, debe devolver una Promesa que se resolverá en el valor que desea devolver.

 // no need for async here, because we're going to be returning a Promise explicilty export const fetchCars = () => { return new Promise((resolve) => { setTimeout(() => { resolve(cars); }, 1000); }); };
about 4 years ago · Juan Pablo Isaza Relatório

0

setTimeout usa una devolución de llamada y no tiene una versión nativa de Promise . Si bien la respuesta de Brendan es correcta y perfectamente funcional, otra opción que es más consistente con el estilo async/await es await la promesa de tiempo de espera en la función async y luego devolver el valor.

 export const fetchCars = async () => { await new Promise((r) => setTimeout(r, 1000); return cars; };

Si está haciendo esto mucho, una función de conveniencia como esta:

 const delay = (delayTime) => new Promise((r) => setTimeout(r, delayTime));

Entonces te permitirá escribir tu función como:

 export const fetchCars = async () => { await delay(1000); return cars; };
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda