ts中为什么这行代码不加await关键字会报错?

问题描述

框架是nest.js,orm库为typeorm。在63行中,如果不使用await关键字的话会报错:ts:没有与此调用匹配的重载。
e6548204408742e8c50544efbf7ae67.png

正确的代码(添加await关键字后):
aaeb90e8fefecd682a0a283dca7cb6c.png

报错提示:
ae7fe0248a8b82b31c4a985a305ef96.png

问题出现的环境背景及自己尝试过哪些方法

我使用debug工具,它告诉我

63     this.articleRepository.remove(exitArticle);
                                         ~~~~~~~~~~~
    Did you forget to use 'await'?

相关代码

这是完整的代码:

@Injectable()
export class ArticleService {
  constructor(
    @InjectRepository(User) private readonly userRepository: Repository<User>,
    @InjectRepository(Article)
    private readonly articleRepository: Repository<Article>,
    private readonly connection: DataSource,
  ) {}

    // ...
  findOne(id: number) {
    return this.articleRepository.findOne({ where: { id } });
  }

  async remove(id: number) {
    const exitArticle = await this.findOne(id);
    if (!exitArticle) throw new Error('不存在该文章');
    this.articleRepository.remove(exitArticle);
    return `成功删除`;
  }
}

这是我的entity文件:

//...

@Entity()
export class Article {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column()
  content: string;

  @Column({
    name: 'create_time',
    type: 'timestamp',
    default: () => 'CURRENT_TIMESTAMP',
  })
  createTime: Date;

  @Column({
    name: 'update_time',
    type: 'timestamp',
    default: () => 'CURRENT_TIMESTAMP',
  })
  updateTime: Date;

  // 与User实体建立多对一关系
  @ManyToOne((type) => User, (user) => user.articles)
  user: User;

  // 与Tag实体建立多对多关系
  @ManyToMany((type) => Tag, (tag) => tag.articles)
  @JoinTable()
  tags: Tag[];
}

你期待的结果是什么?实际看到的错误信息又是什么?

我认为的是加不加await关键字都会先拿到findOne方法的返回值,因为在声明exitArticle常量的时候就会执行findOne方法,但似乎不用await的话,不会先拿到返回值?

阅读 2.1k
1 个回答

因为不加 await, exitArticle的类型是Promise<Article[]>,自然无法直接传个remove,报错信息已经提示很明显了,

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题