javascript - JavaScript:保存实体,能不能写得更好?
问题描述
我有一个保存在用户数据库中的方法。因为我的数据库有关系,所以我需要 userAuth 和 userSalary 表中 UserEntity 的 user_id ,所以user
变量必须是第一个。但我想返回整个用户模型和关系作为响应。
你能把这个方法写得更优雅吗?例如 Promise.all 或 ES6+ 中的任何功能?
async createUser(userRegisterDto: UserRegisterDto): Promise<UserEntity> {
const user = this.userRepository.create({ ...userRegisterDto });
await this.userRepository.save(user);
const userAuth = this.userAuthRepository.create({
...userRegisterDto,
user,
});
await this.userAuthRepository.save(userAuth);
const userSalary = this.userSalaryRepository.create({
...userRegisterDto,
user,
});
await this.userSalaryRepository.save(userSalary);
return user;
}
解决方案
第 5-8 行与第 10-13 行几乎相同,因此您可以将它们分解为单独的函数:
async function saveUserToRepo(repo, userRegisterDto: UserRegisterDto, user) : Promise {
const newItem = repo.create({
...userRegisterDto,
user,
});
await repo.save(newItem );
}
async createUser(userRegisterDto: UserRegisterDto): Promise<UserEntity> {
const user = this.userRepository.create({ ...userRegisterDto });
await this.userRepository.save(user);
await saveUserToRepo(this.userAuthRepository, userRegisterDto, user);
await saveUserToRepo(this.userSalaryRepository, userRegisterDto, user);
return user;
}
如果可以并行运行这两个中间保存而不会导致任何问题(您需要对此做出判断),您可以使用Promise.all
并行跟踪它们:
async createUser(userRegisterDto: UserRegisterDto): Promise<UserEntity> {
const user = this.userRepository.create({ ...userRegisterDto });
await this.userRepository.save(user);
await Promise.all([
saveUserToRepo(this.userAuthRepository, userRegisterDto, user),
saveUserToRepo(this.userSalaryRepository, userRegisterDto, user),
]);
return user;
}
推荐阅读
- php - json_encode($list, 15) - 什么是 15?
- python - 我可以使用百分比随机化 Python 中的列表吗?
- java - 我可以从非 UI 应用程序获得 Youtube 报告 API 的授权吗?
- php - 将 Word 文件转换为 Twig 并保留 Twig 指令
- tree - 从树形图中计算拉普拉斯算子和特征值/向量
- distance - 使用空间索引提升点到多边形的距离查询
- database - 数据库设计协助
- php - 我想删除路由登录而不干扰我的登录,Laravel 7
- xml - XML 序列化 - 原始文本(转义和字符)
- sql - STRING_AGG 具有不同的无子查询