如何使用nodejs从javascript中的方法中调用递归方法?
我正在尝试建立与MySQL数据库的连接,目前为止,该连接仍在工作,但当我运行nodejs应用程序时,我没有读取/更新数据库中的任何内容,连接会关闭,原因是: 错误:连接丢失服务器已关闭连接 所以我在谷歌上搜索,发现了这个问题。但是我不能让它工作,我认为这是因为我使用的是类而不是函数 以下是我目前拥有的代码:如何使用nodejs从javascript中的方法中调用递归方法?,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在尝试建立与MySQL数据库的连接,目前为止,该连接仍在工作,但当我运行nodejs应用程序时,我没有读取/更新数据库中的任何内容,连接会关闭,原因是: 错误:连接丢失服务器已关闭连接 所以我在谷歌上搜索,发现了这个问题。但是我不能让它工作,我认为这是因为我使用的是类而不是函数 以下是我目前拥有的代码: class ConnectionFactory { constructor() { this.connectAndHandleDisconnect(); }
class ConnectionFactory {
constructor() {
this.connectAndHandleDisconnect();
}
connectAndHandleDisconnect() {
connection = mysql.createConnection(db_config);
connection.connect(function(err) {
if(err) {
console.log('error when connecting to db:', err);
setTimeout(connectAndHandleDisconnect, 2000);
}
});
connection.on('error', function(err) {
console.log('db error', err);
if(err.code === 'PROTOCOL_CONNECTION_LOST') {
connectAndHandleDisconnect(); // Error pops up from this line
} else {
throw err;
}
});
}
}
我收到以下错误消息:
引用错误:未定义connectAndHandleDisconnect
我已尝试将connectAndHandleDisconnect()替换为this.connectAndHandleDisconnect()和self.connectAndHandleDisconnect(),但我不知道如何找到此错误的修复方法。您需要通过
this
访问方法(或引用具有该方法的实例),如下所示:
类连接工厂{
构造函数(){
this.connect和handledisconnect();
}
connectAndHandleDisconnect(){
connection=mysql.createConnection(db_config);
const self=这个;
connection.connect(函数(err){
如果(错误){
log('连接到数据库时出错:',错误);
设置超时(self.connectAndHandleDisconnect,2000);
}
});
connection.on('error',函数(err){
console.log('db error',err);
如果(err.code==='协议\连接\丢失'){
self.connectAndHandleDisconnect();//从此行弹出错误
}否则{
犯错误;
}
});
}
}
当您使用此
时,它很可能不起作用,因为您在函数(err)
内部使用了此
,但问题是此
在该范围内指的是函数(err)
,而不是连接工厂
,因此(函数(err){/*…*/})。connectAndHandleDisconnect
不存在。您需要将此绑定到函数体之外。类似地,如果没有将self
绑定到函数体之外,self
方法将不起作用。在您问题中给出的示例中,它起作用的原因是因为它们在全局范围内声明了handleDisconnect
,而您没有在全局范围内声明它,因此,需要根据其作为实例成员的范围对其进行限定。