我想在console.log中的“ myJson”之前显示“ result”,但是在“ result”之前显示“ myJson”。请帮助我。
async function show() {
var con = mysql.createConnection({
host: "127.0.0.1",
user: "root",
password: "aaaaaaaa",
database: "doto"
})
var myJson = null;
var sql = "select * from task_list";
result = "[";
con.connect(function (err) {
if (err) throw err;
con.query(sql, function (err, rows, fields) {
if (err) throw err;
rows.forEach((row) => {
result = result + '{ detail:' + row.details + ", status:" + row.status + ", subject:" + row.subject + '},';
});
console.log("result" + result);
});
});
result = await result.substring(0, result.length - 1);
result = await result + ']';
myJson = await JSON.stringify(result);
await console.log("myJson" + myJson);
return await myJson;
}
答案 0 :(得分:0)
这个问题的简单答案是,您使用await
是完全错误的... await
用于异步请求。即:调用IO或FS。您很可能应该查看有关用法的MDN文档,但是可以帮助您解决此问题的方法是将conn.connect()
方法下面的代码添加到con.query()
回调中。这将是最简单的解决方案。您可以完成此操作的另一种方法是将conn.connect()
包装在promise中,然后在conn.query()
回调中解析结果。示例如下:
回调:
const conn = mysql.connect()
conn.connect((err, connection) => {
connection.query("query", (err, results) => {
// do all stuff with results here
})
})
承诺:
await new Promise((resolve, reject) => {
conn.connect((err, connection) => {
if (err) return reject(err)
connection.query("query", (err, results) => {
if (err) return reject(err)
resolve(results)
})
})
})
类似的事情会起作用