如何在 nestjs 中使用来自外部 api 的可观察数据?
How to use observable data from an external api in nestjs?
我正在尝试在带有 axios 的 nestjs 中从外部 api 使用。
@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));
}
}
我的服务 class 看起来像这样:
@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;
}
}
但是,如果我 console.log 值“infoPrestacion”,结果如下:
{
infoPrestacion: Observable {
source: Observable { _subscribe: [Function (anonymous)] },
operator: [Function (anonymous)]
}
}
由于还没有解决,所以没有进行到第二个。是否可以等待结果解决(我没有 HttpModule 的任何配置)? return 实际上获取对象本身“infoPrestacion”,但我需要使用这些值而不是 return 那个对象。
我用这个解决了我的问题,希望这能满足您的需求。
如果您将 observable 作为承诺,有两种解决方案可能适合您。
在 class 您使用的是外部 api:
添加 lastValueFrom,它通过订阅可观察对象将可观察对象转换为承诺,等待它完成,并使用观察流中的最后一个值解析返回的承诺。
firstValueFrom 也可能是一个解决方案,它与 lastValuefrom 的作用相反,在您的承诺得到解决时获取第一个元素。
@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<IPrestacion>{
return lastValueFrom(this.httpService.get(`${this.API}/prestacion/${id}`, this.header).pipe(map((res) => res.data)));
}
}
我正在尝试在带有 axios 的 nestjs 中从外部 api 使用。
@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));
}
}
我的服务 class 看起来像这样:
@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;
}
}
但是,如果我 console.log 值“infoPrestacion”,结果如下:
{
infoPrestacion: Observable {
source: Observable { _subscribe: [Function (anonymous)] },
operator: [Function (anonymous)]
}
}
由于还没有解决,所以没有进行到第二个。是否可以等待结果解决(我没有 HttpModule 的任何配置)? return 实际上获取对象本身“infoPrestacion”,但我需要使用这些值而不是 return 那个对象。
我用这个解决了我的问题,希望这能满足您的需求。
如果您将 observable 作为承诺,有两种解决方案可能适合您。
在 class 您使用的是外部 api:
添加 lastValueFrom,它通过订阅可观察对象将可观察对象转换为承诺,等待它完成,并使用观察流中的最后一个值解析返回的承诺。
firstValueFrom 也可能是一个解决方案,它与 lastValuefrom 的作用相反,在您的承诺得到解决时获取第一个元素。
@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<IPrestacion>{
return lastValueFrom(this.httpService.get(`${this.API}/prestacion/${id}`, this.header).pipe(map((res) => res.data)));
}
}