2014-08-28 122 views
0

我正在处理一个代表数据库模块的简单Coffescript类(使用带有jugglingdb的SQLite,它工作正常),它有一个返回总是false的方法,我找不到为什么即:Coffeescript类的方法总是返回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始终为真。 为什么Node.js有这样一个奇怪的行为?

回答

2

主要问题是您在@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 
+0

奏效!谢谢 – madduci 2014-08-29 09:44:05