最新 (2022-09-05)
sqlite を使いましょう。 db.serialize()
は無いし await
つけて実行できます。
以下、古い内容です。
以前の記事
たとえば id
が 1, 2, 3, 4, 5 のレコードを1行ずつ取得して、content
カラムの末尾に『!』を付与してUPDATEするというコードを、db.serialize()
使って書いてみます。
上記のコードは動きません。db.run()
で以下のエラーが出てしまいます。
そうでしょうね。db.run()
は db.serialize()
の直下で実行してないので、それをやる頃にはすでに db.close()
が流れてしまってるからです。
*上記のコードは db.close()
を消せば一応動きます。*プログラム的にデータベースを閉じるタイミングがわからないので、終了までしばらく待たされますが、動くことは動きます。でもそれでいいのかよっていう。
そもそも db.serialize()
が難しいです。というか、自分ひとりでちょっと使いたいだけだったりすると、結果をコールバック関数で受け取るのがしんどいです。
どうするの
自分ひとりでちょっと使うだけなら、db.serialize()
使わないで、Promise化して await
で呼んでしまいます。こっちの方が、本当に何も考えなくていいです。
このサンプル程度の処理だと無駄にコードが長くなるだけですが、もっと複雑なことをやり始めたら、ただただ書いた順番通りに動いてくれるのは楽です。