как вернуть вновь созданный объект при использовании sequelize transcation? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующая функция, которая работает, когда передаются новые данные пользователя. он успешно сохраняет объект и дочерний объект в таблицу mysql. но как мне вернуть объект обратно после сохранения в базе данных, если я использую транзакцию sequelize.

static async add(user) {
    let transaction; 
      try {
          // get transaction
        transaction = await models.sequelize.transaction();

        //  *****how to return the newly created user *****************************************

        models.User.create(user).then(newUser => {
          const id = newUser.id;

           //save address 
          if(user.address){

              address.userId = id;
              models.Address.create(address); 

          }
        }).catch(error => {
          throw error;
        }); 

        await transaction.commit();

      } catch (error) {
          console.log(error); 
            // Rollback transaction 
          if (transaction) await transaction.rollback();
          throw error;
      }
    }

1 Ответ

1 голос
/ 13 августа 2020

Попробуйте создать автоматическую транзакцию, используйте ожидание и укажите transaction в функциях модели create:

static async add(user) {
      try {
        const createdUser = await models.sequelize.transaction(transaction => {
          const newUser = await models.User.create(user, { transaction })
           //save address 
          if(user.address){
            address.userId = newUser.id;
            await models.Address.create(address, { transaction }); 
          }
          return newUser;
        });
        // if you are here it means transaction already commited
        return createdUser;
      } catch (error) {
          // if you are here it means transaction already rolled back
          console.log(error); 
          throw error;
      }
    }
...