Javascript 如何使用axis将子查询添加到查询结果中

Javascript 如何使用axis将子查询添加到查询结果中,javascript,sql,node.js,express,Javascript,Sql,Node.js,Express,我正在基于id查询对象表。然后,我想用我的结果id查询同一个表,并将其作为新属性添加到result对象中。希望,这是有道理的: app.get(`/details`, (req, res) => { const { id } = req.query; connection.query( `SELECT objects.* FROM objects WHERE id = ${id} LIMIT 1`, (err, results)

我正在基于
id
查询
对象
表。然后,我想用我的结果id查询同一个表,并将其作为新属性添加到result对象中。希望,这是有道理的:

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 = [];
        connection.query(
          `SELECT
            objects.*
          FROM objects
          WHERE relationship = ${result.id}`,
          (err, rel_results) => {
            if (err) {
              return res.send(err);
            } else {
              rel_results.forEach((el) => {
                result.relationships.push(el);
              });
              // This log looks fine. result.relationhips is an array of objects.
              console.log(result);
            }
          }
        );
        // Here, the result has an empty array for result.relationhips
        return res.json(result);
      }
    }
  );
});

查看注释时,为什么日志中的结果正确,而返回中的结果不正确?

您需要将return语句放在嵌套回调中,这是主要的 由于提前返回:

result.relationships = [];
        connection.query(
          `SELECT
            objects.*
          FROM objects
          WHERE relationship = ${result.id}`,
          (err, rel_results) => {
            if (err) {
              return res.send(err);
            } else {
              rel_results.forEach((el) => {
                result.relationships.push(el);
              });
              // This log looks fine. result.relationhips is an array of objects.
              console.log(result);
              return res.json(result);
            }
          }
        );
       

你根本不需要做出承诺。当结果在第二个查询回调中可用时,您只需发送结果即可:

(err, results) => {
  if (err) {
    return res.send(err);
  } else {
    let result = results[0];
    result.relationships = [];
    connection.query(
      `SELECT
        objects.*
      FROM objects
      WHERE relationship = ${result.id}`,
      (err, rel_results) => {
        if (err) {
          return res.send(err);
        } else {
          rel_results.forEach((el) => {
            result.relationships.push(el);
          });
          // This log looks fine. result.relationhips is an array of objects.
          console.log(result);

          res.json(result);
        }
      }
    );
  }

提示:使用承诺或异步等待。