Come utilizzare i dati rilevabili dall'esterno api in nestjs?

0

Domanda

Im cercando di utilizzare una api esterna in 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));
  }
}

E la classe di servizio simile a questo:

@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;
    }
}

Tuttavia, se i console.registro il valore "infoPrestacion" questo è il risultato:

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

e doesnt ottenere il secondo visto che non è ancora risolto. È possibile attendere il risultato fino a quando è stato risolto (non ho una config per l'HttpModule) ? Il ritorno diventa l'oggetto stesso "infoPrestacion" ma ho bisogno di lavorare con i valori e non restituire l'oggetto.

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

Migliore risposta

0

Ho risolto il mio problema con questo, spero che questo possa soddisfare le vostre esigenze.

Se prendete il vostro osservabile come una promessa, ci sono due soluzione che potrebbe andare bene per voi.

Nella classe si sta utilizzando una api esterna:

Aggiungere lastValueFrom che converte un osservabile una promessa sottoscrivendo il osservabili, in attesa di completare e risolvere restituito promessa con l'ultimo valore osservato stream.

firstValueFrom potrebbe essere anche una soluzione, fa l'opposto di lastValuefrom sempre il primo elemento come la tua promessa è risolto.

@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

In altre lingue

Questa pagina è in altre lingue

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