【问题标题】:How to pass SQLite results to a callback in Nodejs [duplicate]如何将 SQLite 结果传递给 Nodejs 中的回调 [重复]
【发布时间】:2017-06-30 13:47:35
【问题描述】:

我正在使用带有 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函数之前完全生成?

【问题讨论】:

    标签: javascript node.js sqlite callback electron


    【解决方案1】:

    您应该使用testDatabase.all 函数一次获取所有行。例如:

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

    请参阅文档:

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

    另一个注意事项:在 NodeJS 中,当您调用回调函数时,建议使用第一个返回值作为 nullerror 值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多