在 Node.js 中使用 Promise 处理 MySQL 返回值
在这种异步编程范例中,处理 MySQL 返回值需要采用不同的方法到像Python这样的语言。本文重点介绍如何使用 Promise 重构代码以有效处理 MySQL 结果。
考虑以下示例:
<code class="javascript">function getLastRecord(name) { var connection = getMySQL_connection(); var query_str = "SELECT name, " + "FROM records " + "WHERE (name = ?) " + "LIMIT 1 "; var query_var = [name]; connection.query(query_str, query_var, function (err, rows, fields) { //if (err) throw err; if (err) { //throw err; console.log(err); logger.info(err); } else { //console.log(rows); return rows; } }); //var query = connection.query(query_str, function (err, rows, fields) { } var rows = getLastRecord('name_record'); console.log(rows);</code>
由于 Node.js 的异步特性,此代码很困难。为了解决这个问题,我们可以采用基于 Promise 的解决方案:
<code class="javascript">function getLastRecord(name) { return new Promise(function (resolve, reject) { // The Promise constructor should catch any errors thrown on // this tick. Alternately, try/catch and reject(err) on catch. var connection = getMySQL_connection(); var query_str = "SELECT name, " + "FROM records " + "WHERE (name = ?) " + "LIMIT 1 "; var query_var = [name]; connection.query(query_str, query_var, function (err, rows, fields) { // Call reject on error states, // call resolve with results if (err) { return reject(err); } resolve(rows); }); }); }</code>
现在,我们可以使用 then/catch 块处理返回值:
<code class="javascript">getLastRecord('name_record').then(function (rows) { // now you have your rows, you can see if there are <20 of them }).catch((err) => setImmediate(() => { throw err; })); // Throw async to escape the promise chain</code>
通过拥抱 Promise ,我们可以在 Node.js 中更高效地处理 MySQL 返回值,利用其异步功能,同时保持可读性。
以上是如何在 Node.js 中使用 Promise 高效处理 MySQL 返回值?的详细内容。更多信息请关注PHP中文网其他相关文章!