我在事务中使用 Sequelize ,并且还钩住了插入和删除命令。 挂钩工作正常,但是在执行挂钩函数期间,我使用afterCommit向事务添加了回调。
我对每个钩子执行此操作,因此对于每个插入或删除操作。 之所以这样做,是因为仅在执行提交后才需要使用数据。
因此,基本上,通常的流程是:
因此,如第4步所示,一旦提交,就有3个对象函数排队运行。
问题是输入数据(键/值对象)完全相同,这可能是由于提升所致。
我尝试了多种方法来解决此问题,但无法使其正常工作。 当我尝试简单的测试来复制它时,它运行良好,因此我认为问题出在afterCommit实现及其处理数据的方式上。
关于如何进行这项工作的任何想法?
//Hook function
var hookFunction = function(obj, options){
//Getting the data that was inserted in the table
var dataValues = obj.dataValues;
//check if the command was executed in a transaction
if(options && options.transaction) {
//create the function to run after the commit
var cb = (res) => {
//use the same data as input to create the same object in a different table with the same structure
return otherModel.create(dataValues);
}
//queue the function to the transaction
options.transaction.afterCommit(cb);
}
else
//if not in a transaction, simply create the object
return otherModel.create(dataValues);
}
//Add hook to model
model.addHook('afterCreate', hookFunction);
model.addHook('afterDestroy', hookFunction);