Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

154
Vistas
¿Cómo esperar a que se complete un observable para devolver un valor?

Tengo una función que es la siguiente.

 public getAssemblyTree(id: number) { .... const request = from(fetch(targetUrl.toString(), { headers: { 'responseType': 'json' }, method: 'GET' })); request.subscribe( (response) => { response.json().then(data => { assemblyNodesForTree.push(...this.parseAssemblyTree(data['flat_assembly_graph'])); } ) } ) console.log(assemblyNodesForTree) return assemblyNodesForTree; }

Me di cuenta de que la función devuelve assemblyNodesForTree sin que se complete el observable. Me preguntaba cuál puede ser la forma correcta de hacerlo.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Está pensando en una operación asynchronous para trabajar de forma synchronous . También se refiere a la preguntaProblema que devuelve el valor de RxJS Observable . Explica un tipo de caso de uso similar.


Sugerencia rápida: use fromFetch en lugar de from(fetch)

¿Por qué fromFetch ? - porque utiliza internamente la API de fetch y completa el observable después de que finaliza la llamada a la API.

Te estás suscribiendo dentro de la función getAssemblyTree , que se llamará dentro de un tiempo una vez que finalice ajax. Y antes de eso, simplemente regrese, en lugar de eso, debe devolver la variable assemblyNodesForTree . Eso estará vacío siempre.

Para lidiar con la naturaleza asíncrona, puede canalizar su observable y realizar la operación relevante dentro de la función de operador de map . Al final, devuelva Promise / Observable desde la función getAssemblyTree .

 public getAssemblyTree(id: number) { .... const request = fromFetch({ url: targetUrl.toString(), headers: { 'responseType': 'json' }, method: 'GET' }).pipe( map(async (response) => { const assemblyNodesForTree = []; const data = await response.json() assemblyNodesForTree.push( ...this.parseAssemblyTree(data['flat_assembly_graph']) ); return assemblyNodesForTree; }) ); return request; }

Uso

 async myFunction() { const assemblyNodesForTree = await lastValueFrom(getAssemblyTree(id)) }

El uso de esta función va a ser bastante simple, llame al envoltorio de la función getAssemblyTree(id) con lastValueFrom (). Y tan pronto como termine la llamada a la API fromFetch , se resolverá la promesa.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda