簡體   English   中英

如何使用 nodejs 從 javascript 中的方法中調用遞歸方法?

[英]How do you call a recursive method from within a method in javascript with nodejs?

我正在嘗試建立到我的 MySQL 數據庫的連接,到目前為止它正在工作,但是當我運行 nodejs 應用程序時,我沒有讀取/更新我的數據庫中的任何內容,連接關閉:

錯誤:連接丟失服務器關閉了連接

所以我在谷歌上搜索並找到了這個stackoverflow 問題。 但是我無法讓它工作,我認為這是因為我正在使用一個類而不是一個函數。

以下是我目前擁有的代碼:

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 (或引用具有該方法的實例)訪問方法,如下所示:

class ConnectionFactory {

    constructor() {
        this.connectAndHandleDisconnect();
    }

    connectAndHandleDisconnect() {
        connection = mysql.createConnection(db_config);
        const self = this;
        connection.connect(function(err) {
            if(err) {
                console.log('error when connecting to db:', err);
                setTimeout(self.connectAndHandleDisconnect, 2000);
            }
        });

        connection.on('error', function(err) {
            console.log('db error', err);
            if(err.code === 'PROTOCOL_CONNECTION_LOST') {
                self.connectAndHandleDisconnect();              // Error pops up from this line
            } else {
                throw err;
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM