gpt4 book ai didi

javascript - Coffeescript 类方法总是返回 false

转载 作者:行者123 更新时间:2023-12-02 17:02:53 25 4
gpt4 key购买 nike

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

数据库.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 有如此奇怪的行为?

最佳答案

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

您调用回调函数的方式总是错误的,条件调用的正确语法是callback? @连接

您的代码应如下所示:

@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

关于javascript - Coffeescript 类方法总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com