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

174
Visualizações
Texto mecanografiado: Promise vuelve a principios

Me dan un código con 3 partes que no se deben cambiar:

1. una llamada a la función getData y luego imprime la salida.

 getData().then(console.log);

2. La firma de la función:

 async getData(): Promise<string[]>

3. función getDataFromUrl

 function getDataFromUrl(url: string, callback: any) { fetch(URL) .then((content: any) => content.json()) .then((data) => callback(data)); }

Esta es mi implementación para la función getData:

 async getData(): Promise<string[]> { return await new Promise<any>(function(resolve, reject) { resolve(getDataFromUrl(myUrl, ((data: string[]): string[]=> { return data }))) }); }

El problema es que el código después de fetch se ejecuta después de

getData().then(console.log);

entonces console.log imprime: indefinido

¿Qué necesito cambiar en la función getData?

Gracias

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

En lugar de resolver la función getDataFromUrl , debe resolver el valor que expone la función de devolución de llamada.

 getData(): Promise<string[]> { return new Promise<string[]>(function(resolve, reject) { getDataFromUrl(myUrl, (data: string[]): string[] => { resolve(data) }) }); }

Es lamentable que no pueda cambiar nada sobre las otras funciones, porque devolver la promesa creada por fetch en su función getDataFromUrl mejoraría mucho el código, como demuestra Quentin.

about 4 years ago · Juan Pablo Isaza Relatório

0

getDataFromUrl no tiene un valor de retorno, por lo que devuelve undefined .

Entonces, pasa undefined para resolve (lo que resuelve su otra promesa) y luego, más tarde , se resuelve la promesa creada por getDataFromUrl (o más bien fetch ).


  • No cree promesas de bonificación
  • No mezcle devoluciones de llamada y promesas

Simplemente devuelva la promesa de fetch .

 function getDataFromUrl(url: string, callback: any) { return fetch(URL) .then((content: any) => content.json()); }

Y use esa promesa en lugar de crear una nueva en getData (que no necesita usar await porque eso solo resolverá la promesa que inmediatamente será envuelta en una nueva promesa por async .

 getData(): Promise<string[]> { return getDataFromUrl(myUrl); }
about 4 years ago · Juan Pablo Isaza Relatório

0

function getDataFromUrl(url, f) { // call fetch (returns promise) but we can use then as well. // note our callback: f where we pass the data to the callback. fetch(url).then((content) => content.json()).then(data => f(data)); } // edit: note we don't need this be async anymore... async function getData() { // create a promise... return new Promise((resolve, reject) => { // we call with callback arrow and resolve data here getDataFromUrl('https://randomuser.me/api/', (data) => resolve(data)); }) } // we print the data once the getData is done fetching // you can also use reject to handle anything that goes wrong in above. getData().then(data => console.log(data));

Recursos utilizados:

  • Obtener API
  • Async, Await y Promise
  • Llamar de vuelta
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