我正在nodejs中构建应用程序,在该应用程序中,我必须通过点击HTTPS端点来显示数据。我正在使用Swagger UI来显示数据。我得到Promise { <pending> }
我该如何解决这个承诺?
这是我的controller.ts代码
@Controller('/service/api/message')
export class MessageController {
source: string;
productCode: string;
vehicleType: string;
constructor(private messageService: MessageService) {}
@Get()
async generateData() {
console.log(
this.messageService.getData(
this.source,
this.productCode,
this.vehicleType,
),
);
this.messageService.getData(
this.source,
this.productCode,
this.vehicleType,
);
}
@Post()
async generateMessage(@Body() productEvent: ProductEvent) {}
}
这是我的服务。
@Injectable()
export class MessageService {
constructor(private readonly httpService: HttpService) {}
configEndPoint: string =
'https://abcd.com';
async getData(
source: string,
productCode: string,
vehicleType: string,
): Promise<any> {
return await this.httpService.get(this.configEndPoint);
}
}
答案 0 :(得分:0)
如果这是NestJS中内置的HttpService
,则该服务将返回RxJS Observable,默认情况下该等待。您可以使用toPromise()
来将Observble转换为可以等待的应许,并且应该从那里得到等待的响应。否则,您可以删除await
并使函数不异步,返回可观察到的值,并让NestJS在后台进行订阅。
重要的旁注:您需要确保您不要尝试发送回原始的Axios响应,因为有些循环引用使Nest无法进行字符串化。查看observable pipe and map运算符,或在then
之后使用toPromise()
并以这种方式映射响应
答案 1 :(得分:0)
如果不需要从NestJs使用HttpService,则可以使用request-promise-native或request-promise。这些软件包将默认返回Promises,您可以等待它们。
希望有帮助!