У меня есть код, подобный приведенному ниже:
const _addEvents = async(eventList, day, transaction) => {
await eventList.forEach(event => {
return model.events.findOne({where:event, transaction: transaction}).then(event => {
if(!event) {
transaction.rollback();
throw new Error("event not found");
}
return event;
})
.then(event => {
day.addEvents(event, {through: {status: 'ENABLED'}});
day.save();
})
})
}
}
export const create = async(attributes) => {
return await sequelize.transaction(async(t) => {
return model.days.create(attributes, {transaction: t})).then(async(day) => {
await _addEvents(attributes.eventList, day, t);
return day;
})
})
}
Я вижу, что транзакция начинается, и в дни транзакции добавляется строка.На первой итерации, когда findOne
вызывается в методе _addEvents
, транзакция фиксируется.
Я использовал Sequelize.useCLS("foo");
, поэтому я ожидаю, что все транзакции будут в одном и том же пространстве имен однако Я передаю транзакцию, просто чтобы быть уверенным.
Может кто-нибудь сказать мне, почему транзакция совершается после выполнения findOne
, и при этом сказать мне, как избежать этого.
Я использую (babel-core 6.26.3) и node.js v9.2.0 & postgres 10.5