узел- mysql несколько операторов в одном запросе, выполняются условно по ответу каждого - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу выполнить несколько запросов за один вызов API, но я хочу выполнить их только условно на основе ответа предыдущего. Как я могу go о реализации этого?

Я видел, что могу выполнить что-то подобное ниже для выполнения нескольких запросов.

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

Но как мне дождаться ответа первого перед условным выполнением второго?

1 Ответ

1 голос
/ 10 марта 2020

Это не поддерживается (если не записано в самой базе данных - например, t sql, pl sql или другие). Что вы можете сделать - это выполнить запрос, дождаться его результатов и затем выполнить другой соответственно. пример:

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();
}
...