msksgm’s blog

msksgm’s blog

Webエンジニアです.日々の勉強,読書,映画観賞,美術観賞の記録を載せます.

mysqlとmysql-promiseの違いについて

概要

node.js のパッケージにmysqlpromise-mysqlがあります。
何が違うのかがわからないので調べてみました。

以下promise-mysqlnpmのページから引用

原文

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非同期処理できる
みたいな感じですね(名前の通りでしたが。。。)。

vscode では、awaitを使用時に非同期処理できなかったらawaitaに黄色の下線がでてきて、'await' は、この式の型に対しては効果がありません。と表示されます。非同期処理できるときには、なにも表示されません。

画像のように、まったく同じ処理でも、非同期処理が可能かどうかが異なることがわかりました。

f:id:msksgm:20210908065614p:plain
mysqlが非同期処理ができないが、promise-mysqlは非同期処理ができる

余談ですが、個人的には「非同期処理できない(同期処理のみ)の場合でもasync/awaitを使えば順番通りに動作するから関係ないのでは?」と思ったときがあります。
しかし、どうやら同期処理は node.js のパフォーマンスを低下させますが、非同期処理で同期的に動作させてもパフォーマンスは下がらないみたいです。
なので、非同期処理ができないパッケージはなるべく避けたほうがよさそうですね。

具体的な処理はなにもしていませんが、今回のソースコードはこちら

github.com

参孝

www.npmjs.com

bluebirdjs.com