【俺メモ】node-sqlite3でデータが取れなかった時の処理
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
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の処理が走らんさかい、注意な。
});
追加したところを抜粋すんで。
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件の判定を書いても無駄なあがきになるさかい注意な。
なんせ非同期で処理が進んで先に外側の処理が動いてまうからな。
Author And Source
この問題について(【俺メモ】node-sqlite3でデータが取れなかった時の処理), 我々は、より多くの情報をここで見つけました https://qiita.com/nullpointer_t/items/d8a7edfc63ba72f73266著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .