【发布时间】:2015-11-02 18:47:43
【问题描述】:
我想知道一种方法来创建一个事务并且不在其他模型之间共享它,下面的代码正在抛出一个异常
Unhandled rejection SequelizeDatabaseError: SQLITE_ERROR: cannot start a transaction within a transaction
at module.exports.Query.formatError (workspace/node_modules/sequelize/lib/dialects/sqlite/query.js:239:16)
at Statement.<anonymous> (workspace/node_modules/sequelize/lib/dialects/sqlite/query.js:47:31)
at Statement.replacement (workspace/node_modules/sqlite3/lib/trace.js:20:31)
at Statement.replacement (workspace/node_modules/sqlite3/lib/trace.js:20:31)
名称为'I will exist' 的模型不能在事务中,但 sequelize 会尝试将其插入在另一个函数上创建的事务中。
return Promise.all([
sequelize.transaction(function (transaction) {
return new Promise(function (r) {
setTimeout(function () {
r();
}, 1000);
}).then(function () {
User.create({ name : 'Im out of tx' });
});
}),
sequelize.transaction(function (transaction) {
return Promise.all([
User.create({ name : 'I will exist' }),
User.create({ name : 'I will not exist' }, { transaction : transaction })
]).then(function () {
return new Promise(function (r) {
setTimeout(function () {
r();
}, 1000);
});
}).then(function () {
throw new SaphyreError('ok, now rollback');
});
}).then(function () {
throw new Error('an error should be thrown');
}).catch(SaphyreError, function (err) {
expect(err).to.have.property('message').equal('ok, now rollback');
return User.findAll();
})
]).spread(function (a, b) {
expect(b).with.length(2);
});
我想知道如何创建一个事务并且从不全局共享它。
【问题讨论】:
标签: node.js transactions sequelize.js