ホームページ >データベース >mysql チュートリアル >Node.js で MySQL クエリを Async/Await と同期するにはどうすればよいですか?

Node.js で MySQL クエリを Async/Await と同期するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-30 04:41:19963ブラウズ

How to Synchronize MySQL Queries with Async/Await in Node.js?

Node.js での Async/Await と MySQL クエリの同期

Node.js では、async/await キーワードを使用して非同期コードで次のことを行うことができます。同期的に書き込まれます。 MySQL クエリなどのデータベース操作の場合、これは続行する前にすべての結果が確実に取得されるようにするのに特に役立ちます。

課題: 非同期クエリ

次のコードを考えてみましょう。スニペットは、複数のデータベース結果を取得して文字列に追加しようとします:

var string1 = '';
var string2 = '';
var string3 = '';
var string4 = '';

DatabasePool.getConnection(function(err, connection) {

        connection.query(query,function (err, result) {
            if (err){};
            string1 = result;
        });

        connection.query(query,function (err, result) {
            if (err){};
            string2 = result;
        });     

        connection.query(query,function (err, result) {
            if (err){};
            string3 = result;   
        });

        connection.query(query,function (err, result) {
            if (err){};
            string4 = result;
        }); 

       //I need to append all these strings to appended_text but  
       //all variables remain blank because below code runs first.
       var appended_text = string1 + string2 + string3 + string4;
});

この例ではコードでは、各クエリは非同期で実行され、appended_text 変数の未定義の動作が発生します。この問題を解決するために、Node.js 8 には強力な機能が導入されています。

解決策: Async/Await による約束

async/await を使用してクエリを同期するには、次のことができます。ネイティブの util.promisify() 関数をノードの mysql モジュールと組み合わせて利用します。次に例を示します:

const mysql = require('mysql');
const util = require('util');
const conn = mysql.createConnection({yourHOST/USER/PW/DB});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    // Execute your queries sequentially using await
    const rows1 = await query('select count(*) as count from file_managed');
    const rows2 = await query('select count(*) as count from file_managed');
    const rows3 = await query('select count(*) as count from file_managed');
    const rows4 = await query('select count(*) as count from file_managed');

    // Append the results to the appended_text variable
    var appended_text = rows1.count + rows2.count + rows3.count + rows4.count;

    console.log(appended_text);
  } finally {
    conn.end();
  }
})();

このコードでは:

  1. まず、接続のクエリ メソッドが Promise を返すことを約束します。
  2. 非同期関数内で、クエリを順番に実行し、その結果を待ちます。
  3. 最後に、結果は、同期された方法で appended_text 変数に書き込まれます。

ノード mysql で async/await を使用すると、データベース クエリの同期が簡素化され、コードがより読みやすく保守しやすくなります。

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

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