ホームページ >データベース >mysql チュートリアル >Node.js で MySQL をクエリする際の同時実行性の問題を Async/Await で解決するにはどうすればよいですか?

Node.js で MySQL をクエリする際の同時実行性の問題を Async/Await で解決するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-29 01:41:12569ブラウズ

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

Node.js での非同期実行: MySQL での Async/Await の使用

Node.js を初めて使用する場合、適応するのが難しい場合があります。特に非同期操作を使用する場合は、最新の構文を使用できます。 MySQL データベースにクエリを実行するときに、async/await キーワードを使用して同期された結果を得る方法を見てみましょう。

コード内で、複数のクエリを実行し、結果を 1 つの文字列に連結したいとします。ただし、Node.js は JavaScript コードをノンブロッキングで実行するため、以下のコードは変数 string1 から string4 に期待される結果が含まれることを保証しません。

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

Async/ による解決策Await

この問題を解決し、同期実行を可能にするために、Node.js 8 ではutil.promisify() 関数。これを MySQL ライブラリと統合する方法は次のとおりです:

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

この改訂されたコードでは:

  • クエリ メソッドは、util.promisify() を使用して Promise に変換されます。
  • bind() 関数は、これが元のオブジェクトを参照していることを保証します。
  • Promise.all() メソッドは、4 つのクエリすべてを同時に実行し、結果の配列を返します。
  • 結果は抽出され、appended_text に連結されます。
  • 最後に、接続が閉じられます。

このアプローチにより、クエリをシームレスに同期し、信頼性の高い方法で目的の出力を取得できます。 async/await は、Node.js で非同期操作を処理するための強力なツールです。

以上がNode.js で MySQL をクエリする際の同時実行性の問題を Async/Await で解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。