node.js用のSqlite3のパッケージnode-sqlite3のdb.eachを使ったときのメモや。
インストールとか省略。
SQLの実行結果が0件の場合を検知できないパターン
app.js
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('db.sqlite3');
db.serialize(function() {
//取り出したレコードを1行ずつループするeachを使うで
db.each('SELECT * FROM test WHERE id = ?', [n], function(err, row) {
if (err){
//エラー処理してな
}else{
//rowの値を処理するところや
}
});
//eachで結果が0件ならcallbackの処理が走らんさかい、注意な。
});
complete処理追加で解決
追加したところを抜粋すんで。
app.js
//取り出したレコードを1行ずつループするeachを使うで
db.each('SELECT * FROM test WHERE id = ?', [n], function(err, row) {
if (err){
//エラー処理してな
}else{
//rowの値を処理するところや
}
}, function(err, count){ //←complete処理追加
//SQL実行直後に上のコールバック処理が走る前にここが処理されるで。
if (err){
//エラー処理な
}else{
if (count == 0){
//ここでSQLの実行結果が0件の処理や
}else{
//処理や
}
}
});
});
db.eachの外側に件数が0件の判定を書いても無駄なあがきになるさかい注意な。
なんせ非同期で処理が進んで先に外側の処理が動いてまうからな。