Heim > Datenbank > MySQL-Tutorial > Wie kann Async/Await Parallelitätsprobleme beim Abfragen von MySQL in Node.js lösen?

Wie kann Async/Await Parallelitätsprobleme beim Abfragen von MySQL in Node.js lösen?

Mary-Kate Olsen
Freigeben: 2024-11-29 01:41:12
Original
566 Leute haben es durchsucht

How Can Async/Await Solve Concurrency Issues When Querying MySQL in Node.js?

Asynchrone Ausführung in Node.js: Verwendung von Async/Await mit MySQL

Als Node.js-Neuling kann es zu Anpassungsschwierigkeiten kommen seine moderne Syntax, insbesondere bei der Arbeit mit asynchronen Operationen. Lassen Sie uns untersuchen, wie Sie die Schlüsselwörter async/await verwenden, um beim Abfragen einer MySQL-Datenbank synchronisierte Ergebnisse zu erzielen.

In Ihrem Code möchten Sie mehrere Abfragen ausführen und die Ergebnisse in einer einzigen Zeichenfolge verketten. Da Node.js jedoch JavaScript-Code nicht blockierend ausführt, garantiert der folgende Code nicht, dass die Variablen string1 bis string4 die erwarteten Ergebnisse enthalten:

// Original Code
var string1 = '';
var string2 = '';
var string3 = '';
var string4 = '';

DatabasePool.getConnection((err, connection) => {
  // Query 1
  connection.query(query, (err, result) => {
    string1 = result;
  });

  // Query 2
  connection.query(query, (err, result) => {
    string2 = result;
  });

  // Query 3
  connection.query(query, (err, result) => {
    string3 = result;
  });

  // Query 4
  connection.query(query, (err, result) => {
    string4 = result;
  });

  // Attempt to concatenate results
  var appended_text = string1 + string2 + string3 + string4;
});
Nach dem Login kopieren

Lösung mit Async/ Warten

Um dieses Problem zu beheben und eine synchrone Ausführung zu ermöglichen, stellt Node.js 8 die Funktion util.promisify() bereit. So integrieren Sie es in die MySQL-Bibliothek:

// Improved Code
const mysql = require('mysql');
const util = require('util');
const conn = mysql.createConnection({ yourHOST, yourUSER, yourPW, yourDB });

// Promisify the query method
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    // Execute queries concurrently
    const [query1Result, query2Result, query3Result, query4Result] = await Promise.all([
      query('select count(*) as count from file_managed'),
      query('another query'),
      query('another query'),
      query('another query'),
    ]);

    // Concatenate results
    const appended_text = query1Result[0].count + query2Result[0].count + query3Result[0].count + query4Result[0].count;
  } finally {
    // Close the connection
    conn.end();
  }
})();
Nach dem Login kopieren

In diesem überarbeiteten Code:

  • Die Abfragemethode wird mit util.promisify() in ein Promise konvertiert.
  • Die bind()-Funktion sorgt dafür, dass sich dieser weiterhin auf das ursprüngliche Objekt bezieht.
  • Die Promise.all()-Methode führt alle vier Abfragen aus gleichzeitig und gibt ein Array von Ergebnissen zurück.
  • Die Ergebnisse werden extrahiert und in appended_text verkettet.
  • Schließlich wird die Verbindung geschlossen.

Dieser Ansatz ermöglicht es Ihnen Synchronisieren Sie Ihre Abfragen nahtlos und erhalten Sie die gewünschte Ausgabe auf zuverlässige Weise, was async/await zu einem leistungsstarken Tool für die Verarbeitung asynchroner Vorgänge macht Node.js.

Das obige ist der detaillierte Inhalt vonWie kann Async/Await Parallelitätsprobleme beim Abfragen von MySQL in Node.js lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage