Używasz pętli synchronicznej do wdrażania zasobu asynchronicznego. Nie możesz tego zrobić.
Twoja pętla while wypełnia pulę bazy danych, a następnie zapętla się ponownie i blokuje getConnection
który następnie blokuje całą pętlę zdarzeń Node.js.
Możesz użyć async
pakiet do wykonywania asynchronicznych pętli while.
async#forever połączenie zrobi to, co chcesz osiągnąć.
Ponadto Twój kod przecieka połączenia z bazą danych. Powinieneś umieścić connection.end()
najpierw w wywołaniu zwrotnym, chyba że zamierzasz ponownie użyć tego samego połączenia. W przeciwnym razie błąd spowoduje wyciek połączenia z bazą danych.
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);
});
});