Node-mysql 在一个查询中有多个语句,根据每个语句的响应有条件地执行



我想在一个 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();
}

相关内容

最新更新