问题描述
框架是nest.js,orm库为typeorm。在63行中,如果不使用await关键字的话会报错:ts:没有与此调用匹配的重载。
正确的代码(添加await关键字后):
报错提示:
问题出现的环境背景及自己尝试过哪些方法
我使用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
的话,不会先拿到返回值?
因为不加
await
,exitArticle
的类型是Promise<Article[]>
,自然无法直接传个remove
,报错信息已经提示很明显了,