2016-10-08 6 views
1

node.jsのsqlite3でselect文を実行します。私はsqliteコードブロックの外で定義されている変数 "データ"の結果を持っているが、それは空のままです。 sqliteコードブロック内では、データ変数に正しい値が設定されています。誰かが私が間違っていることを知っていますか?node.jsの変数のsqlite3による妥当性

ありがとうございます。

/* Client connects via socket.io */ 
 
    io.on('connection', function(client) { 
 
     console.log('Client connected'); 
 

 
     /* Client needs data... */ 
 
     client.on('needData', function(fields) { 
 
      var data = []; 
 
      var sql_stmt = "SELECT ..."; 
 
      if(fs.existsSync(db_file)) { 
 
       try { 
 
        var db = new sqlite3.Database(db_file); 
 
        db.all(sql_stmt, function(err, all) { 
 
         data = all; 
 
         console.log(data); //--> data has valid values 
 
        }); 
 
        db.close(); 
 
        console.log(data); //--> data is empty 
 
       } 
 
       catch(e) { 
 
        console.log("Error with database. Error: ", e); 
 
       } 
 
      } 
 
      else { 
 
       console.log("Database file not found."); 
 
      } 
 

 
      client.emit('data', data); 
 
     }); 
 
    });

+0

waterfall方法を使用することをお勧めしますという理由だけでNode.jsasynchronous性質のあなたはpromises

によってでそれを扱うことができる起こっ非同期の性質に、私たちにお試しくださいそれを達成するための約束または非同期モジュール – abdulbarik

答えて

0

私はそれが原因だasyncモジュール

var async=require('async'); 
    /* Client connects via socket.io */ 
    io.on('connection', function(client) { 
    console.log('Client connected'); 

    /* Client needs data... */ 
    client.on('needData', function(fields) { 
     async.waterfall([function(next) { 
     var sql_stmt = "SELECT ..."; 
     if (fs.existsSync(db_file)) { 
      try { 
      var db = new sqlite3.Database(db_file); 
      db.all(sql_stmt, function(err, all) { 
      next(null,all) 
      }); 
      db.close(); 
      } catch (e) { 
      console.log("Error with database. Error: ", e); 
      next(); 
      } 
     } else { 
      console.log("Database file not found."); 
      next(); 
     } 
     }], function(err, data) { 
     if (!err) { 
     client.emit('data', data); 
     } 
     }) 
    }); 
    }); 
+0

ありがとう!これは問題を解決しました。 – sbgt

+0

喜んでお手伝いします..cheers !!!! – abdulbarik