2017年12月22日金曜日

nodeJS mysql co bluebird promise generator ハマりまくってメモするの巻

まとまった時間取れないから、罠だらけのモジュールにて何日も苦労した・・・
ググっても知見がなさすぎるのでメモ。

node V6.3.1にて
バッチ処理的な物をどうしても同期してmysqlをさわらないといけないのだが、
いろいろハマりポイントが多いのでメモしておく。

<!!!NG例!!!>
const Promise = require('bluebird');
global.db  = Promise.promisifyAll(connection);
db.queryAsync("SELECT * FROM users;")
  .then(function(rows){console.log(rows);})

promisifyAll(connection)で作ったqueryAsyncが正常に終了しない。
値はとれて同期してるんだけど、戻ってこない。
よくわかんないから追わないことにした。


const mysql = require('promise-mysql');
とりあえずこれを使ったら一応、正常終了はできたw
だけど、これどうやって別のbluebirdのcoroutineとくっつけるんだろ?たぶんできると思うけど・・・


エラーハンドリングも雑でいいので、本当はyieldで書いてすっきりさせたい。
co-mysqlでジェネレータで動かす奴を動作するのか確認してみる。
もはやここまで来たら見慣れたソースとか関係ねぇスッキリさせることに注力するしか!


Android PromiseとかJdefferedなど俺はこういうのやたら悩む傾向がある。
デザインパターンを理解してないんだろうか?w
なんだかんだで用途がシンプルなjQueryは偉大だなと痛感したわ。

<追記>
以下2種類のモジュールがあるが、そのままでプロセス抜けれるのがmysql-coで。
思った以上にnodeがこなれてなくて泣ける。
本当にエンタープライズ用に機能してんのか?!
co-mysql: 正常終了できない・・・createPool, createConnectionともにダメ。

 無理やり終わらすしかない .then((data) => { console.log(data);process.exit(); })

mysql-co: 正常終了可能!・・・createPool非対応、ってことは時間かかる処理があると、db接続に失敗しそう・・・どうしたもんか。半ばあきらめて一旦これで収束させる。


この問題が解けたら、ちょっとしたツールは今後すべてnodeを使うことにしよっかなー

0 件のコメント:

コメントを投稿