回调 connect.query

Callback connect.query

async function view_department() {
  let department = await inquirer.prompt(department_questions);

  get_query("department", "name", department.choices, function (data) {
    get_query("role", "department_id", data[0].id, function (data) {
      let table = [];
      for (var i = 0; i < data.length; i++) {
        get_query("employee", "role_id", data[i].id, function (data) {
          console.log(data[0]);
          table.push(data[0]); 
          //when I console.table(table) here it does print the table I need,
          //but it doing that for how ever many time the loop run
        });
      }
      console.table(table); //table is empty, it's not waiting for the code above to finish
    });
  });
}
async function get_query(table, data, value, callback) {
  connection.query(
    `SELECT * FROM ${table} WHERE ${data} = ?`,
    [value],
    (err, res) => {
      if (err) callback(err);
      callback(res);
    }
  );
}

我正在尝试从一个 table 获取数据并使用它从另一个 table 获取数据,但我只是不明白回调是如何工作的 and/or 如何实施它们。

async/awaitpromise 与回调混合使用并不是一个好主意。 引入promise的主要原因是为了避免callbacks的嵌套 有了承诺,同样的问题可以像

一样得到解决
async function get_query(table, data, value) {
  return new Promise((resolve, reject) => {
    connection.query(
    `SELECT * FROM ${table} WHERE ${data} = ?`,
    [value],
    (err, res) => {
      if (err) reject(err);
      resolve(res);
    }
  );
  })
}

现在get_query可以用作

const firstResult = await get_query("department", "name", department.choices)

await get_query("role", "department_id", firstResult[0].id)

希望我解释得当,我的想法是避免回调。