Cum să utilizați observabile date de la o sursă externă de api în nestjs?

0

Problema

Im încercarea de a utiliza la un api extern în nestjs cu 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));
  }
}

Și serviciul meu de clasă arată astfel:

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

Cu toate acestea, dacă am consola.jurnal valoarea "infoPrestacion" acesta este rezultatul:

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

și aceasta nu ajunge la cel de-al doilea, deoarece nu este încă rezolvată. Este posibil să așteptați pentru rezultatul până s-a rezolvat (nu am nici un config pentru HttpModule) ? Revenirea fapt devine obiectul în sine "infoPrestacion" dar am nevoie pentru a lucra cu valorile și să nu se întoarcă acel obiect.

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

Cel mai bun răspuns

0

Am rezolvat problema mea cu acest lucru, sper că acest lucru s-ar putea potrivi nevoilor dumneavoastră.

Dacă-ți iei observabile ca o promisiune există două soluții care s-ar potrivi pentru tine.

În clasa utilizați un api extern:

Adaugă lastValueFrom care convertește un observabile la o promisiune de abonați la observabile, de așteptare pentru el pentru a finaliza, și rezolvarea revenit promit cu ultima valoare de observat stream.

firstValueFrom ar putea fi, de asemenea, o soluție, nu invers de lastValuefrom obtinerea primul element ca promisiunea ta este rezolvată.

@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

În alte limbi

Această pagină este în alte limbi

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