Bạn đang sử dụng vòng lặp đồng bộ để triển khai tài nguyên không đồng bộ. Bạn không thể làm điều đó.
Vòng lặp while của bạn lấp đầy nhóm cơ sở dữ liệu, sau đó lặp lại một lần nữa và chặn trên getConnection
sau đó sẽ chặn toàn bộ vòng lặp sự kiện Node.js.
Bạn có thể sử dụng async
gói để thực hiện các vòng lặp while không đồng bộ.
async # forever cuộc gọi sẽ thực hiện những gì bạn đang cố gắng đạt được.
Ngoài ra, mã của bạn đang làm rò rỉ các kết nối cơ sở dữ liệu. Bạn nên đặt connection.end()
đầu tiên trong cuộc gọi lại trừ khi bạn sẽ sử dụng lại cùng một kết nối. Nếu không, lỗi sẽ làm rò rỉ kết nối cơ sở dữ liệu.
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);
});
});