2017-02-12 13 views
0

electronモジュールでnode.jsのsqlite3モジュールを使用しています。私はjavascriptが新しく、コールバックと非同期コードで苦労しています。NodeiteのコールバックにSQLiteの結果を渡す方法

私の意図は、getTable関数を実行し、テーブル配列を作成し、その配列をuseTable関数であるコールバック関数に渡すことです。

ので、この機能は、構築し、パステーブルの配列必要があります。

function getTable(callback) { 
    const sqlite3 = require('sqlite3').verbose(); 
    var testDatabase = new sqlite3.Database('app/data/testDatabase.db'); 
    var table = []; 
    var testRow = []; 
    testDatabase.each("SELECT * FROM test_Accounts", function(err, row) { 
     testRow.push(row.test_id); 
     testRow.push(row.test_creation_date); 
     testRow.push(row.domain); 
     testRow.push(row.test_login_url); 
     table.push(testRow); 
     testRow = []; 
    }); 
    testDatabase.close(); 
    callback(table); 
} 

そして、この関数は、テーブルの配列を取得し、それを使用します:

function useTable(table) { 
    //code that uses the table array passed to this function from the getTable function. 
} 

そして、私はこのようにこれを実行します:

getTable(useTable); 

これを実行すると、コンソールにエラーは表示されません。私は、コールバックの主な目的の1つであるgetTable関数でテーブル配列が完成する前にuseTable関数が実行されたように見えます。この配列を取る前に非同期コードが実行されるのを待ちます。それを別の関数に渡します。

getTable関数のテーブル配列が完全に生成されてからuseTable関数が実行されることを確認するにはどうすればよいですか?

答えて

1

testDatabase.all機能を使用して、すべての行を一度に取得する必要があります。

testDatabase.all('SELECT * from test_accounts',callback) 

ドキュメントを参照してください:たとえば

指定されたパラメータでSQLクエリを実行し、その後、すべての結果行でコールバックを呼び出します。 https://github.com/mapbox/node-sqlite3/wiki/API#databaseallsql-param--callback

つ以上のノート:NodeJSで、あなたはnullまたはerror値として最初に返された値を使用することをお勧めします関数をコールバックするために呼び出します。

function useTable(err,table){ 
    if (err){ 
    throw Err 
    } 
    else { 
    // Do something with the data 
    } 
} 

getTable(useTable) 
関連する問題