Node.js 中的非同步執行:在MySQL 中使用Async/Await
作為Node.js 的新手,您可能會遇到適應困難它的現代語法,特別是在處理非同步操作時。讓我們探討一下在查詢 MySQL 資料庫時如何使用 async/await 關鍵字來實現同步結果。
在您的程式碼中,您希望執行多個查詢並將結果連接到單一字串中。但是,由於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 中 Async/Await 如何解決查詢 MySQL 時的並發問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!