Javascript 等待JS mysql包无法正常工作
我对Javascript/node非常陌生,还不了解这个概念。我不清楚以下代码。我希望在从数据库检索所有结果之前不要显示“END”。我希望您不要告诉我把它放在行输出后面,这确实是一个解决问题的方法。我认为“wait”将使代码真正等待其处理完成Javascript 等待JS mysql包无法正常工作,javascript,mysql,node.js,async-await,Javascript,Mysql,Node.js,Async Await,我对Javascript/node非常陌生,还不了解这个概念。我不清楚以下代码。我希望在从数据库检索所有结果之前不要显示“END”。我希望您不要告诉我把它放在行输出后面,这确实是一个解决问题的方法。我认为“wait”将使代码真正等待其处理完成 const mysql = require('mysql'); // or use import if you use TS const util = require('util'); const conn = mysql.createConnection
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");
谢谢你不能那样使用它。如果没有回调,mysql将对结果进行流式处理,您需要在事件侦听器上使用
根据文件:
流式处理行时,不能提供对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();
}
})()
wait仅适用于promisfy,您不能等待其他东西,尽管promisfy为我做了这件事。将console.log(“END”)
移动到finally块后的行中,或将其放入finally块中。wait
使异步函数代码中它下面的代码等待Promise解析。它不会神奇地影响已经运行的代码。好吧,但我的问题是如何在不这样做的情况下完成它。因为一般来说,我已经非常简化了这个问题,因为在一般情况下,类必须用DB中的值初始化,并且我不希望其他代码在这样做时运行。