同期ループを使用して非同期リソースをデプロイしています。それはできません。
whileループがデータベースプールをいっぱいにしてから、もう一度ループしてgetConnection
をブロックします 次に、Node.jsイベントループ全体をブロックします。
async
を使用できます 非同期のwhileループを実行するパッケージ。
async#forever 電話はあなたが達成しようとしていることをするでしょう。
また、コードがデータベース接続をリークしています。 connection.end()
を配置する必要があります 同じ接続を再度使用する場合を除いて、最初にコールバックを実行します。そうしないと、エラーによってデータベース接続がリークされます。
pool.getConnection(function (err, connection) {
if (err) throw err;
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
connection.end(); // return to pool before evaluating error.
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
});