javascript - 使用sqlite3在node.js中变量的有效性

标签 javascript node.js sqlite node-sqlite3

我在node.js中的sqlite3上做了一个select语句。我希望将结果保存在 SQLite 代码块外部定义的变量“data”中,但它保持为空。在 sqlite 代码块内,数据变量具有正确的值。有人知道我做错了什么吗?

谢谢。

    /* 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);
        });
    });

最佳答案

发生这种情况只是因为 Node.js异步本质,您可以通过 promise 来处理它

我建议使用waterfall方法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);
        }
      })
    });
  });

关于javascript - 使用sqlite3在node.js中变量的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39934342/

相关文章:

javascript - 同类最佳的 JavaScript 数据表小部件/库

node.js - 允许 chai/mocha 测试将错误冒泡到 process.on

java - 如何用 Java 更新 SQlite 中特定列中的特定行?

javascript - 如何根据扩展修改数组

javascript - Angular JS,异步回调中的范围更新

javascript - 奇怪的javascript对象问题

node.js - 如何将较大的 HTML 分解为较短的 HTML 以供 google 翻译 API 使用

node.js - 在 Sequelize 中使用 JOIN

android - 如何在sqlite3中添加上标

c# - SQLite 不在准备好的语句中保留我的前导零