2016-01-26 5 views
2

Я хочу создать крючок secelize на afterCreate на моей модели пользователя. он отлично работает, когда я просто создаю пользователя без транзакции. но если я запустил свой оператор create в транзакции, то крючок запускается до фиксации.Sequelize hook в зависимости от транзакции

пользователя Модель крючки

hooks: { 
    afterCreate: userModule.NewUserHook, 
    afterBulkCreate: userModule.NewUserHook 
} 

функция Крюк

NewUserHook: function NewUserHook(user, options){ 
    console.log('Inside hook'); 
} 

сделки составляет accesssible в options.transaction.

Есть ли способ запустить крюк после совершения транзакции?

ответ

0

Немного поздно к игре, но так как я столкнулся с этим вопросом во время поиска ответов, этот может быть полезен для других.

Если вы создаете пользователя внутри транзакции, то объект транзакции будет передан в одном из аргументов обратного вызова крюка (в зависимости от версии). Link to docs. Следующие копия копируется непосредственно из исходного кода:

// Here we use the promise-style of async hooks rather than 
// the callback. 
User.hook('afterCreate', (user, options) => { 
    // 'transaction' will be available in options.transaction 

    // This operation will be part of the same transaction as the 
    // original User.create call. 
    return User.update({ 
    mood: 'sad' 
    }, { 
    where: { 
     id: user.id 
    }, 
    transaction: options.transaction 
    }); 
}); 


sequelize.transaction(transaction => { 
    User.create({ 
    username: 'someguy', 
    mood: 'happy', 
    transaction 
    }); 
Смежные вопросы