Coffeescript类方法总是返回false

时间:2014-08-28 13:02:24

标签: javascript node.js coffeescript

我正在处理一个代表数据库模块的简单Coffescript类(使用带有jugglingdb的SQLite,工作正常),它有一个返回总是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

数据库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()报告始终为false,但is_connected始终为true。 为什么Node.js有这么奇怪的行为?

1 个答案:

答案 0 :(得分:2)

主要问题是您在this回调中失去@db.on上下文。为防止这种情况发生,您应使用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