我对Javascript / node很陌生,还不了解这个概念。下面的以下代码对我来说还不清楚。从数据库检索所有结果之前,我不希望显示“ END”。希望您不要告诉我将其放在行输出后面,并且确实有解决该问题的方法。我认为“等待”将使代码真正等待其处理完成。
const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({
"host" : "",
"user" : "",
"password" : "",
"database" : "",
});
// node native promisify
const query = util.promisify(conn.query).bind(conn);
(async () => {
try {
const rows = await query('select count(*) as count from table');
console.log(rows);
} finally {
conn.end();
}
})()
console.log("END");
谢谢
答案 0 :(得分:-2)
您不能那样使用它。如果没有回调,mysql将改为流式传输结果,并且您需要使用on
事件监听器。
根据文档:
流传输行时,您不得提供对query()方法的回调。
以这种方式,您需要添加事件并解决承诺:
async function myQueryFunction(str, replacements) {
return new Promise(resolve => {
let rows = []
query(str, replacements)
.on('result', (row) => {
// Do something with the row
rows.push(row)
})
.on('end', () => resolve(rows))
})
}
否则,您需要使用回调函数来调用query
方法,因此创建一个查询函数以解析诺言...
async function myQueryFunction(str, replacements) {
return new Promise(resolve => {
query(str, replacements, (err, rows) => {
resolve(rows)
})
})
}
最后,您可以调用从上述示例之一创建的方法,如下所示:
(async () => {
try {
const rows = await myQueryFunction('select count(*) as count from table');
console.log(rows);
} finally {
conn.end();
}
})()