knex-transaction
Version:
A wrapper for managing transaction
27 lines (25 loc) • 710 B
JavaScript
import { transaction, Model } from "objection";
import cls from "cls-hooked";
const session = cls.createNamespace("session");
module.exports = fn => {
return async function() {
const transactionManager = await transaction.start(Model.knex());
const args = [...arguments];
const res = await session.runAndReturn(async () => {
let err;
session.set("tx", transactionManager);
try {
const fn1 = await fn(args[0]).catch(err => {
throw err;
});
await transactionManager.commit();
return fn1;
} catch (error) {
err = error;
await transactionManager.rollback();
throw err;
}
});
return res;
};
};