在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; });
在此程式碼中,執行每個查詢非同步,導致append_text 變數出現未定義的行為。為了解決這個問題,Node.js 8 引入了一個強大的功能。
解決方案:使用Async/Await 進行Promisification
要使用async/await 同步查詢,您可以將本機util.promismysqlify 函數與節點sqlify 模組結合使用。以下是一個範例:
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(); } })();
在此程式碼中:
在node mysql中使用async/await可以簡化資料庫查詢的同步,從而使程式碼更具可讀性和可維護性。
以上是如何在 Node.js 中使用 Async/Await 同步 MySQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!