UNPKG

mybatis-node

Version:

MyBatisNodeJs is a port from the The MyBatis Java data mapper framework for Node.Js.

95 lines (94 loc) 2.8 kB
import * as uuid from "uuid"; class Context { public callbacks; public id; public connection; public loading; constructor() { this.callbacks = []; this.id = uuid.v4(); } public uploaded(connection) { this.connection = connection; this.loading = false; for (const callback of this.callbacks) { callback(this.connection); } } public getConnected(callback, pool) { if (this.connection) { return callback(this.connection); } this.callbacks.push(callback); if (this.loading === true) { return; } this.loading = true; pool.getConnection((err, connection) => { if (err) { throw err; } this.uploaded(connection); }); } public initiationTransaction(callback, pool) { const withchange = (callback) => { this.connection.beginTransaction(() => { const res=callback(this.connection, (success, error) => { this.commit(success); }); if(res instanceof Promise){ res.then(()=> { this.connection.commit((err)=>{ if (err) { return this.connection.rollback(function() { throw err; }); } }) }).catch(err=>{ return this.connection.rollback(function() { throw err; }); }) }else{ return res } }); }; if (this.connection) { return withchange(callback); } this.getConnected((connection) => { withchange(callback); }, pool); } public release() { if (this.connection) { this.connection.release(); } } public commit(callback) { if (!this.connection) { return; } this.connection.commit( (result, err) => { if (err) { this.connection.rollback(() => { if (callback) { callback(false); } }); } else if (callback) { callback(true); } }); } public rollback() { if (!this.connection) { return; } this.connection.rollback(); } } export default Context;