首页 > 解决方案 > 打字稿:在严格模式下分配之前使用变量

问题描述

我正在尝试使用数据库事务来创建Page记录,但是我得到了Variable 'createdPage' is used before being assigned即使this.pagesService.create()只返回Page并且如果出现问题它会抛出错误,因此如果没有抛出异常,程序可以确定 createdPage 已设置。那么为什么我会收到这个错误?

  @Post('')
  async create(
    @Body() body: PageCreateDto,
  ): Promise<Page> {
    let createdPage: Page;
    try {
      await this.database.transaction(async trx => {
        createdPage = await this.pagesService.create(body, trx);
      });
    } catch (error) {
      throw new InternalServerErrorException('unable to create page');
    }

    return createdPage;
    
  }

标签: javascripttypescript

解决方案


问题是您传递给事务调用的函数不会同步运行,因此您无法确定在返回时实际分配了 createdPage。你可以通过创建一个 Promise 来解决这个问题。

@Post('')
async create(@Body() body: PageCreateDto): Promise<Page> {
  return new Promise<Page>((resolve, reject) => {
    try {
      await this.database.transaction(trx => this.pagesService
        .create(body, trx)
        .then(resolve));
    } catch (error) {
      reject(new InternalServerErrorException('unable to create page'));
    }
  }); 
}

推荐阅读