2017-05-01 12 views
1

現在SQLite 3を使用しており、コールバック関数を実行するクエリを実行しています。このコールバック関数は、クエリのすべての結果を、後で関数にアクセスするための関数レベルの変数に格納します。このコールバックは、関数の後半部分を実行して関数レベルの変数を空にするように見えます。クエリが完了した後にのみ、残りの関数を実行する方法はありますか?ノードの非同期機能がどのように動作するかの性質であるSQLクエリが完了するまで待つNodeJS SQLite 3

var results = []; 
var query = conn.query(q, function(error, result){ 

    for (var i = 0; i < result.rowCount; i++) { 
      results.push(result.rows[i]); 
     } 
    console.log(results); // results is not empty here 
}); 


// console.log(results); // results is empty here 
+0

あなたが達成しようとしているもので、より具体的なことができますか?あなたの質問に基づいて、それはあなたがjavascriptの非同期の性質を認識しているようですので、あなたが何を求めているのかは分かりません。 –

答えて

0
var results = []; 
    var query = conn.query(q); 
    query.then(function(error, result){ 
     for (var i = 0; i < result.rowCount; i++) { 
      results.push(result.rows[i]); 
     } 
     console.log(results); // results is not empty here 

    }); 
1

Control flow

基本的には、いくつかのレベルのネスティングや機能を分離する必要があります。

var results = []; 
var query = conn.query(q, function(error, result){ 
    for (var i = 0; i < result.rowCount; i++) { 
     results.push(result.rows[i]); 
    } 
    console.log(results); // results is not empty here 
    // Do whatever you want next here 
}); 

または

var results = []; 
var query = conn.query(q, function(error, result){ 
    for (var i = 0; i < result.rowCount; i++) { 
     results.push(result.rows[i]); 
    } 
    console.log(results); // results is not empty here 
    continue(); 
}); 

function continue() { 
    // Do the next things here 
}