Comment utiliser l'aide de données observables à partir d'un api externe dans nestjs?

0

La question

Im essayant d'utilisation d'un api externe dans nestjs avec 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));
  }
}

Et ma classe de service ressemble à ceci:

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

Cependant si j'ai de la console.journal de la valeur "infoPrestacion" c'est le résultat:

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

et il ne reçoit pas à la seconde, car il n'est pas encore résolue. Est-il possible d'attendre le résultat jusqu'à ce qu'il est résolu (je n'ai pas de config pour la HttpModule) ? Le retour se fait de l'objet lui-même "infoPrestacion" mais j'ai besoin de travailler avec les valeurs et de ne pas renvoyer cet objet.

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

La meilleure réponse

0

J'ai résolu mon problème avec cela, j'espère que cela répond à vos besoins.

Si vous prenez votre observables comme une promesse il y a deux solution qui pourrait s'adapter pour vous.

Dans la classe que vous utilisez une api externe:

Ajouter lastValueFrom qui convertit une observable à une promesse en vous abonnant à la observables, attendre qu'il termine, et la résolution de l'retourné promesse avec la dernière valeur de l'observation des flux.

firstValueFrom pourrait être aussi une solution, à l'opposé de lastValuefrom obtenir le premier élément de votre promesse est résolu.

@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

Dans d'autres langues

Cette page est dans d'autres langues

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