Как добавить запрос второго уровня в запрос axios?

#javascript

#javascript

Вопрос:

Я запрашиваю objects таблицу в axios следующим образом:

 app.get(`/details`, (req, res) => {
  const { id } = req.query;
  connection.query(
    `SELECT
      objects.*
    FROM objects
    WHERE id = ${id}
    LIMIT 1`,
    (err, results) => {
      if (err) {
        return res.send(err);
      } else {
        let result = results[0];
        result.relationships = [];
        result.tasks = [];
        return res.json(result);
      }
    }
  );
});
  

Как я могу добавить следующие два запроса к моему результату results.relationship :

 `SELECT objects.* FROM objects WHERE objects.relationship = ${result.id}
  

и к моему результату results.tasks :

 `SELECT tasks.* FROM tasks WHERE tasks.relationship = ${result.id}
  

Комментарии:

1. Поправьте меня, если я ошибаюсь, но какое это имеет отношение к axios?

2. Вы можете просто продолжать переходить к следующему обратному вызову; таким образом, внешние переменные будут доступны в любое время. Или вы переключаетесь на Promises и используете await , гораздо лучшее решение.

3. Если это не имеет ничего общего с axios, поправьте меня, и я обновлю теги.

4. Похоже, вы должны сначала пообещать это при создании объекта подключения. перейдите по этой ссылке, после чего вы сможете использовать .then() как promise или await . codota.com/code/javascript/functions/mysql/Connection/query

5. @ChrisG Спасибо. Можете ли вы включить это в ответ? Я не знаю, как перенести эту подсказку в код. Было бы очень полезно.

Ответ №1:

Вот рабочее решение, вытекающее из комментариев. Спасибо @Chris G.

 app.get(`/details`, (req, res) => {
  const { id } = req.query;

  const query = util.promisify(connection.query).bind(connection);

  (async () => {
    try {
      let [
        object,
      ] = await query(`SELECT objects.* FROM objects WHERE id = ? LIMIT 1`, [
        id,
      ]);

      const relatedObjects = await query(
        `SELECT objects.* FROM objects WHERE relationship = ?`,
        [id]
      );
      object.relationships = relatedObjects;

      const tasks = await query(
        `SELECT tasks.* FROM tasks WHERE relationship = ?`,
        [id]
      );
      object.tasks = tasks;

      return res.json(object);
    } catch (error) {
      console.log(error);
    } finally {
      connection.end();
    }
  })();
});