Como usar dados observáveis a partir de uma api externa em nestjs?

0

Pergunta

Estou tentando usar a partir de uma api externa em nestjs com 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 a minha classe de serviço parecido com este:

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

No entanto, se eu consola.registrar o valor "infoPrestacion" este é o resultado:

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

e ele não chegar ao segundo, pois não está resolvido ainda. É possível aguardar o resultado até que seja resolvido (eu não tenho nenhuma configuração para o HttpModule) ? O retorno realmente é o objeto em si "infoPrestacion" mas eu preciso trabalhar com os valores e não devolver o objeto.

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

Melhor resposta

0

Eu resolvi meu problema com isso, eu espero que este pode atender às suas necessidades.

Se você tomar a sua observáveis como uma promessa há dois solução que pode caber para você.

Na classe que você está usando uma api externa:

Adicionar lastValueFrom que converte um observável para uma promessa de subscrição observáveis, esperando por ele para concluir, e a resolução do devolvidos promessa com o último valor observado de fluxo.

firstValueFrom poderia ser também uma solução, faz o oposto do lastValuefrom obter o primeiro elemento como sua promessa é resolvido.

@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

Em outros idiomas

Esta página está em outros idiomas

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