【问题标题】:Coffeescript class method always returns falseCoffeescript 类方法总是返回 false
【发布时间】:2014-08-28 21:54:47
【问题描述】:

我正在处理一个表示数据库模块的简单 Coffescript 类(使用 SQLite 和 jugglingdb,效果很好),它有一个总是返回 false 的方法,我不知道为什么会这样:

database.coffee

Schema = require('jugglingdb').Schema;

module.exports = class Database
  constructor: (database_file) ->
    if database_file?
        @filename = database_file
    else
        @filename = 'board.db'

    console.log '[DB] SQLite database: ' + @filename

    @db = null
    @connection = false

  connect: (callback) ->
    @db = new Schema 'sqlite3', { database: @filename } 
    @db.on 'connected', () -> 
        console.log '[DB] Database connection established'
        @connection = true
        callback? callback(@connection)
    @db.on 'disconnected', ()-> 
        console.log '[DB] Database closed' 
        @connection = false
        callback? callback(@connection)
    @db.log = (message, duration)-> console.log '[DB]' + message


  close: ->
    @db.disconnect()
    delete @db
    @db = null

  getSchema: ->
    if @db isnt null
        return @db
    else
        return null

  isConnected: -> 
    return @connection

database-test.js

var Database = require('./database');
function db_connection_cb(is_connected)
{
  var connection = db.isConnected();
  console.log("Class method: " + connection + " --- from callback: " + is_connected);
}

var db = new Database('user_test.db'); 
db.connect(db_connection_cb);

令人惊讶,db.isConnected() 总是报告错误,但 is_connected 总是正确的。 为什么 Node.js 有这么奇怪的行为?

【问题讨论】:

    标签: javascript node.js coffeescript


    【解决方案1】:

    主要问题是您在 @db.on 回调中丢失了 this 上下文。为防止这种情况发生,您应该使用fat arrow => 而不是->。

    你调用回调函数的方式总是错误的,条件调用的正确语法是callback? @connection。

    你的代码应该是这样的:

    @db.on 'connected', => 
        console.log '[DB] Database connection established'
        @connection = true
        callback? @connection
    @db.on 'disconnected', => 
        console.log '[DB] Database closed' 
        @connection = false
        callback? @connection
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 2015-06-09
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多