Cómo el uso de datos observables de una api externa en nestjs?

0

Pregunta

Estoy tratando de uso de una api externa en nestjs con axios.

@Injectable()
export class PIntegration {
  constructor(private httpService: HttpService) { }
  API = process.env.API || 'http://localhost:3000';
  header = { headers: { 'Content-Type': 'application/json' } };

  async getPrestacionById(id: string): Promise<Observable<IPrestacion>>{
   
    return this.httpService.get(`${this.API}/prestacion/${id}`, this.header).pipe(map((res) => res.data));
  }
}

Y mi clase de servicio se parece a esto:

@Injectable()
export class ProductService{
    constructor(private pIntegration: PIntegration){}
    async producto(id: string) {
        const infoPrestacion = await  this.pIntegration.getPrestacionById(id);
        console.log({ infoPrestacion })
        if (infoPrestacion)
        {
             if (infoPrestacion.detalles) {
                console.log(infoPrestacion.detalles)
                console.log("tiene detalles")
            }
        }
        return infoPrestacion;
    }
}

Sin embargo, si yo consola.registrar el valor de "infoPrestacion" este es el resultado:

{
  infoPrestacion: Observable {
    source: Observable { _subscribe: [Function (anonymous)] },
    operator: [Function (anonymous)]
  }
}

y no llegar a la segunda, ya que no se ha resuelto todavía. Es posible esperar el resultado hasta que sea resuelto (yo no tengo ningún tipo de configuración para el HttpModule) ? El retorno de hecho se pone el objeto en sí mismo "infoPrestacion" pero necesito trabajar con los valores y no volver a ese objeto.

axios nestjs nestjs-config
2021-11-23 15:25:15
1

Mejor respuesta

0

He resuelto mi problema con esto, espero que este puede adaptarse a sus necesidades.

Si usted toma su observable como una promesa hay dos soluciones que pueden ajustarse para usted.

En la clase que usted está utilizando una api externa:

Agregar lastValueFrom que convierte de un observable a una promesa mediante la suscripción de la observación, a la espera de que se complete, y resolver las devuelto promesa con el último valor de la observó corriente.

firstValueFrom también podría ser una solución, hace lo contrario de lastValuefrom conseguir el primer elemento como tu promesa está resuelto.

@Injectable()

export class PIntegration {
  constructor(private httpService: HttpService) { }
  API = process.env.API || 'http://localhost:3000';
  header = { headers: { 'Content-Type': 'application/json' } };

  async getPrestacionById(id: string): Promise<Observable<IPrestacion>>{
   
    return lastValueFrom(this.httpService.get(`${this.API}/prestacion/${id}`, this.header).pipe(map((res) => res.data)));
  }
}
2021-11-26 13:34:41

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................