我们希望函数返回一个承诺并关闭数据库连接。最后,我们在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();
}
}
1条答案
按热度按时间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
块