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

时间:2020-02-14 16:34:12

标签: mysql node.js node-mysql

我想在一个API调用中执行多个查询,但是我只想根据前一个查询的响应有条件地执行它们。我该如何实施呢?

我已经看到我可以执行以下操作来执行多个查询。

connection.query('SELECT * ...; SELECT * ...', [1, 2], function(err, results) {
   if (err) throw err;
});

但是在有条件地执行第二个之前,我该如何等待第一个的响应?

1 个答案:

答案 0 :(得分:1)

不支持(除非写在数据库本身中,例如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();
}
相关问题