mysqlとmysql-promiseの違いについて
概要
Node.js のパッケージにmysql
とpromise-mysql
があります。
何が違うのかがわからないので調べてみました。
以下promise-mysql
のnpm
のページから引用。
原文。
Promise-mysql is a wrapper for mysqljs/mysql that wraps function calls with Bluebird promises
和訳。
Promise-mysql は、mysqljs/mysql のラッパーで、関数呼び出しを Bluebird のプロミスでラップします。
ここでBluebird
という、新しい単語が出てきました。これはなんでしょうか。
調べたら、どうやら、Node.js で Promise を使うためのライブラリでした。これを使えば、非同期処理に非対応の状況でも使えるようになるたいです。
なので結論は、mysql
は非同期処理できない、promise-mysql
は非同期処理できるみたいな感じですね。
mysql
をラップした mysql2
は非同期処理ができます。非同期処理の実装方法が Promise を使うか Bluebird を使うかの違いみたいです。
vscode では、await
を使用時に非同期処理できなかったらawait
のa
に黄色の下線がでてきて、'await' は、この式の型に対しては効果がありません。
と表示されます。非同期処理できるときには、なにも表示されません。
画像のように、まったく同じ処理でも、非同期処理が可能かどうかが異なることがわかりました。
余談ですが、個人的には「非同期処理できない(同期処理のみ)の場合でもasync/await
を使えば順番通りに動作するから関係ないのでは」と思ったときがあります。
しかし、どうやら同期処理は Node.js のパフォーマンスを低下させますが、非同期処理で同期的に動作させてもパフォーマンスは下がらないみたいです。
ですので、非同期処理ができないパッケージはなるべく避けたほうがよさそうですね。
具体的な処理はなにもしていませんが、今回のソースコードはこちら。
参考
Discussion