如何在nodejs的同一代码中返回承诺并关闭mysql连接

de90aj5v  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(395)

我们希望函数返回一个承诺并关闭数据库连接。最后,我们在try和connection closing命令中加入了promise,它给出了以下错误-

conPool.close()  //It says  Error - conPool.close() is not a function

conPool.release() // Error - conPool.release() is not a function

conPool.releaseConnection(); // Error - Cannot read property '_pool' 
                                          of undefined

请帮我关闭mysql连接。我想归还我的数据。但在返回后,没有任何工作,因此连接不会关闭。恐怕我可能会超出最大限度。我甚至在mysql中设置了最大连接数,但仍然是。有一个可能的解决方案,我可以在函数外部声明conpool,让所有函数都使用这个conpool,但这也不起作用。
代码-

function viewChoice() {

    var sqlQuery;

        sqlQuery = "select * from TRANSACTION_PAYLOAD where INTERFACE_NAME 
     = 'Vehicle RC' AND (STATUS ='INPUT_ERROR' OR STATUS ='ERROR')";

    }

    var deferred = Q.defer();

    var host = config.host;
    var user = config.user;
    var password = config.password;
    var database = config.database;

    var conPool = mysql.createPool({
        host: host,
        user: user,
        password: password,
        database: database
    });

try{
    conPool.getConnection(function (err) {
        console.log("Inside getConnection ")
        if (err)
            deferred.reject(err.name + ': ' + err.message);

        conPool.query(sqlQuery,
            function (err, result, fields) {
                if (err) deferred.reject(err.name + ': ' + err.message);

                console.log(result);
                deferred.resolve(result);
            });
    });
    return deferred.promise;
}

finally{
    console.log("inside  Finally")
    conPool.releaseConnection();

}

}
fcwjkofz

fcwjkofz1#

从mysql connector文档:
关闭池中的所有连接使用完池后,必须结束所有连接,否则node.js事件循环将保持活动状态,直到mysql服务器关闭连接。这通常是在脚本中使用池或尝试正常关闭服务器时完成的。要结束池中的所有连接,请使用池上的end方法: pool.end(function (err) { // all connections in the pool have ended }); end方法接受一个可选回调,您可以使用它来知道所有连接何时结束。
调用pool.end后,pool.getconnection和其他操作将无法再执行。在调用pool.end之前,请等待池中的所有连接都已释放。如果使用快捷方式pool.query代替pool.getconnection→ 连接.查询→ connection.release,等待它完成。
pool.end对池中的每个活动连接调用connection.end。这将在连接上排队退出数据包,并设置一个标志以防止pool.getconnection创建新连接。所有已在进行的命令/查询都将完成,但新命令不会执行。
另外你可以移动你的 return deferred.promise; 内部 finally

相关问题