gpt4 book ai didi

JavaScript:保存实体,可以写得更好吗?

转载 作者:行者123 更新时间:2023-12-02 22:38:09 28 4
gpt4 key购买 nike

我有一个保存在用户数据库中的方法。因为我的数据库有关系,所以我需要 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;
}

关于JavaScript:保存实体,可以写得更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58678464/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com