javascript - 如何使用 Node 从 mySQL 初始化变量

标签 javascript mysql node.js

我觉得我在这里犯了一个明显的错误。我只是想在对象的构造函数中初始化变量:

var Lobby = function(io, dbConnection, lobbyName) {
  this.connectedPlayers = {};
  this.seatedPlayers = [];
  for (var i=0;i<this.NUMBER_OF_TABLES;i++) {
    this.seatedPlayers[i] = [];
    for (var j=0;j<this.PLAYERS_PER_TABLE;j++) {
      this.seatedPlayers[i][j] = null;
    }
  }
  if (lobbyName == "lobbya") {
    dbConnection.query("SELECT id, username, rating FROM players WHERE id < 0 order by id desc;",
    function (error, results, fields) {  
      for (var i=0;i<results.length;i++) {
        var computerPlayer = new Player(results[i]["id"],results[i]["username"],results[i]["rating"]);
        this.connectedPlayers[results[i]["id"]] = computerPlayer;
        this.seatedPlayers[i+4][1] = computerPlayer;
        this.connectedPlayers[results[i]["id"]].setSeatedAt(i+4);
      }
    });
  }
}

当我运行此命令时,connectedPlayers 未定义。 (我假设是因为它超出了范围,因为我在处理结果的函数内。那么如何初始化范围之外的变量?

最佳答案

您无法在 Javascript 构造函数中初始化异步操作,因为根据定义,构造函数是同步的。

解决此问题的常见方法有以下三种:

1)传入一个初始化的DB。

2)在需要时延迟加载数据库。

Lobby.prototype.connectPlayers = function(cb) {
    self.getConnection(err, db) {
        // getConnection will either init connection or return already inited connection
        // run stuff requiring DB connection
            cb(foo);
    });
}

3) 添加一个异步初始化方法,该方法在 new 后调用。

var lobby = new Lobby();
lobby.init(function(err) {
  // now we have it
});

在我看来,延迟加载是最有效的,因为这意味着您不会运行超出您需要的任何内容。某些Lobby可能不需要数据库连接(特别是对于单元测试)。

关于javascript - 如何使用 Node 从 mySQL 初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055607/

相关文章:

javascript - 将当前时间转换为 WebKit/Chrome 17 位时间戳

javascript - 将文件夹添加到收藏夹并更改文件夹图标 [Electron macOS]

javascript - js数据: What is the difference between "none" and "inject" for DS "reapAction" configuration option?

javascript - 我正在尝试在 javascript 中创建选项卡式内容,但它只工作一次

php检查指定时间是否已过期

javascript - 日志记录会要求单独的良好实践还是杂乱无章?

node.js - ldap nodejs 事件目录认证

php - $stmt->free_result() 有多重要

php - MySQL > 更新查询在 PDO 类型时不起作用

node.js - 无法让 Gulp 运行 : cannot find module 'gulp-util'