2014-08-28 69 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