以下代码按预期工作,但我似乎无法弄清楚如何调用con.end();
db.js:
const
mysql = require('mysql2/promise'),
config = {
host: 'localhost',
port: 3306,
user: 'root',
password: '',
database: 'webhooks'
};
module.exports = async () => {
const
con = await mysql.createConnection(config),
sql = 'SELECT * FROM table',
data = [];
let [rows, fields] = await con.execute(sql);
return rows;
}
app.js:
const test = require('./db.js');
test.then(console.log);
我尝试在con.end();
之前添加return rows;
,也尝试了test.then(...).catch(...).then(() => con.end());
的各种组合,但没有结果。
我在这里想念什么?
答案 0 :(得分:1)
在async
导出函数中,因为正在等待所有异步操作(连接,提取)。理想情况下,con.end()
应该是async
操作,并且可以在刚刚获取和解决结果之前等待它。
module.exports = async () => {
const
con = await mysql.createConnection(config),
sql = 'SELECT * FROM table',
data = [];
let [rows, fields] = await con.execute(sql);
await con.end();
return rows;
}
然后在 app.js 中获取返回的行:
const test = require('./db.js');
test.then(rowsResults => console.log(rowsResults)); //only rows were returned
con
对象也可以与returned promise
一起作为rows
的一部分发送,随后可以在进行测试时关闭,但是在这种情况下看起来很冗长。