JavaScript: сохранить сущность, это может быть написано лучше? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть метод, который сохраняет в базе данных пользователей. Поскольку моя база данных имеет отношения, мне нужен user_id из UserEntity в таблицах userAuth и userSalary, поэтому переменная user должна быть первой. Но я хочу вернуть всю модель 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;
}

1 Ответ

1 голос
/ 03 ноября 2019

Строки 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...