node.jsでのMYSQLトランザクション処理実装例
今回の御題はasyncblock fiberで実装されたI/O処理同期化モジュール
コレを使ってSQL処理に特化したnode-seqに似たようなことをやってみた
前回の記事の3番の実装例っす
https://github.com/scriby/asyncblock
var q = new Query(mysqlconn); q .begin() .query('insert into hogehoge("a","b","c","e") values(0,1,2,3)') .query('insert into hogehoge("a","b","c","e") values(0,1,2,3)') .query('insert into hogehoge("a","b","c","e") values(0,1,2,3)') .query('insert into hogehoge("a","b","c","e") values(0,1,2,3)') .commit() .end({ onSuccess : function(){ }, onError : function(e){ console.log(e); }, onLogging : function(q){ }, });
Queryの中身はSQLをキューでためてendでasyncblockの機能を使って非同期処理にフローを追加して同期的にコネクションにSQLを流すだけ。
↓Query.end()の実装
var self = this; asyncblock(function(flow) { flow.errorCallback = function(e){//例外処理はここにくる self._q.clear(); onError(e); }; while(true){ var q = self._q.dequeue(); if(!q){ break; } onLogging(query); self._mysqlConn.query(query, flow.add()); var content = flow.wait(); if(callback){ callback(content); } } onSuccess(); });
追記
↓似たようなモジュールが出てた