如何将SQLite结果传递给Nodejs中的回调

时间:2017-02-12 15:28:05

标签: javascript node.js sqlite callback electron

我正在使用带有电子模块的node.js的sqlite3模块。我是javascript的新手,我正在努力应对回调和异步代码。

我的目的是让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);

当我运行它时,控制台显示没有错误。似乎useTable函数在getTable函数中完成表数组之前运行,我认为这是回调的主要目的之一,等待异步代码运行(在这种情况下构建一个数组),然后再获取该数组和将它传递给另一个函数。

如何确保getTable函数中的表数组在传递并运行useTable函数之前完全生成?

1 个答案:

答案 0 :(得分:1)

您应该使用testDatabase.all('SELECT * from test_accounts',callback) 函数一次获取所有行。例如:

null

请参阅文档:

  

使用指定的参数运行SQL查询,然后使用所有结果行调用回调。   https://github.com/mapbox/node-sqlite3/wiki/API#databaseallsql-param--callback

还有一个注意事项:在NodeJS中,当您调用回调函数时,建议您将第一个返回值用作errorfunction useTable(err,table){ if (err){ throw Err } else { // Do something with the data } } getTable(useTable) 值。

users
-id
-name

permissions
-id
-name

user_permissions
-user_id
-permission_id
-read
-write
-update
-delete