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中文网其他相关文章!