回调 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/await
或 promise
与回调混合使用并不是一个好主意。
引入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)
希望我解释得当,我的想法是避免回调。
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/await
或 promise
与回调混合使用并不是一个好主意。
引入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)
希望我解释得当,我的想法是避免回调。