在 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.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(); } })();
在此代码中:
在node mysql中使用async/await可以简化数据库查询的同步,从而使代码更具可读性和可维护性。
以上是如何在 Node.js 中使用 Async/Await 同步 MySQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!