Запись массива объектов с помощью транзакции сиквела - PullRequest
0 голосов
/ 09 апреля 2019

Мне нужно записать массив объектов в транзакции секвелирования.

Я получил транзакцию продолжения, в которой я записываю проект (например). Затем мне нужно записать несколько заданий, я сделал это с помощью bulkCreate, но потом я понимаю, что отменил транзакцию, вызывающую bulkCreate, непосредственно из задачи модели.

try {
  const transaction = await db.transaction(t => {
    return Project.create(
      { ...req.body.projectFull.entity },
      { transaction: t }
    ).then(
      projectCreated => {
        let tarefas = req.body.projectFull.tasks;
        const addProjectId = function(object) {
          object.projectId = projectCreated.dataValues.id;
          return object;
        };
        let criarTarefas = tarefas.map(addProjectId);
        Task.bulkCreate(criarTarefas);
      },
      { transaction: t }
    );
  });

Я ожидаю, что bulkCreate будет работать внутри моей транзакции, а не напрямую из модели. Приведенный мною код отлично работает и записывает данные, но обрабатывает транзакцию на bulkCreate

1 Ответ

0 голосов
/ 09 апреля 2019

Эй, я должен сделать эту похожую вещь, и я еще не дошел до этого, но я читал об этом тогда, и пример выглядит следующим образом

return sequelize.transaction(t => {

  // chain all your queries here. make sure you return them.
  return User.create({
    firstName: 'Abraham',
    lastName: 'Lincoln'
  }, {transaction: t}).then(user => {
    return user.setShooter({
      firstName: 'John',
      lastName: 'Boothe'
    }, {transaction: t});
  });

}).then(result => {
  // Transaction has been committed
  // result is whatever the result of the promise chain returned to the transaction callback
}).catch(err => {
  // Transaction has been rolled back
  // err is whatever rejected the promise chain returned to the transaction callback
});

Это выглядит мнекак комментарий выше может быть вашей проблемой ... "убедитесь, что вы вернули их" ... возможно, вы пропустили возврат во второй части вашей цепочки

...