在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 ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise ,我們擁抱Promise可以在Node.js 中更有效率地處理MySQL 傳回值,利用其非同步功能,同時保持可讀性。
以上是如何在 Node.js 中使用 Promise 高效處理 MySQL 回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!