如何解决Nestjs框架中的Promise待处理输出?

时间:2019-12-06 19:47:16

标签: http promise nestjs

我正在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);
  }
}


2 个答案:

答案 0 :(得分:0)

如果这是NestJS中内置的HttpService,则该服务将返回RxJS Observable,默认情况下该等待。您可以使用toPromise()来将Observble转换为可以等待的应许,并且应该从那里得到等待的响应。否则,您可以删除await并使函数不异步,返回可观察到的值,并让NestJS在后台进行订阅。

重要的旁注:您需要确保您不要尝试发送回原始的Axios响应,因为有些循环引用使Nest无法进行字符串化。查看observable pipe and map运算符,或在then之后使用toPromise()并以这种方式映射响应

答案 1 :(得分:0)

如果不需要从NestJs使用HttpService,则可以使用request-promise-nativerequest-promise。这些软件包将默认返回Promises,您可以等待它们。

希望有帮助!