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(); } })();
この改訂されたコードでは:
このアプローチにより、クエリをシームレスに同期し、信頼性の高い方法で目的の出力を取得できます。 async/await は、Node.js で非同期操作を処理するための強力なツールです。
以上がNode.js で MySQL をクエリする際の同時実行性の問題を Async/Await で解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。