[英]node-mysql multiple statements in one query, execute conditionally on response from each
我想在一個 API 調用中執行多個查詢,但我只想根據前一個的響應有條件地執行它們。 我該如何去實施這個?
我已經看到我可以執行以下操作來執行多個查詢。
connection.query('SELECT * ...; SELECT * ...', [1, 2], function(err, results) {
if (err) throw err;
});
但是如何在有條件地執行第二個之前等待第一個的響應?
不支持(除非用數據庫本身編寫 - 如 tsql、plsql 或其他)。 您可以做的是執行查詢,等待其結果,然后相應地執行另一個。 例子:
const query1 = '.....';
connection.query(query1, [...params1], function(err, results) {
if (err) throw err;
const query2 = condition ? '....' : '........';
connection.query(query2, [...params2], ......);
});
等等(回調地獄)。
你可以像這樣做得更好(我認為連接是:mysql.getConnection並且在那里正確設置沒有錯誤)。 params<X>
是一個帶有查詢參數的數組。
const executeQuery = async (con, query, params) {
return new Promise((resolve, reject) => {
con.query(query, params, (err, result) => {
if (err) { return reject(err); }
return resolve(result);
});
});
}
mysql.getConnection((err, connection) => {
if (err) { throw err; }
try {
const query1 = '<some query>';
const result1 = await executeQuery(query1, params1);
const query2 = (condition on query1) ? '<query>' : '<other query>';
const result2 = await executeQuery(connection, query2, params2);
const query3 = (condition you want) ? '<query for that condition>' : '<or not>';
const result3 = await executeQuery(connection, query3, params3);
} catch (err) {
connection.release();
throw err;
} // if newest node you can use finally block and have only one connection.release();
connection.release();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.