Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Node.js, Request, MySQL und Connection Pooling führen zu unendlichem Blockier-/Einfrierverhalten?

Sie verwenden eine synchrone Schleife, um eine asynchrone Ressource bereitzustellen. Das geht nicht.

Ihre While-Schleife füllt den Datenbank-Pool und macht dann eine weitere Schleife und blockiert auf getConnection die dann die gesamte Node.js-Ereignisschleife blockiert.

Sie können den async verwenden Paket, um asynchrone While-Schleifen auszuführen.

Der async#forever Aufruf würde das bewirken, was Sie erreichen möchten.

Außerdem verliert Ihr Code Datenbankverbindungen. Sie sollten connection.end() einfügen zuerst im Rückruf, es sei denn, Sie verwenden dieselbe Verbindung erneut. Andernfalls tritt ein Fehler bei einer Datenbankverbindung auf.

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);
    });
});