我尝试了一些我认为很简单的东西:nodejs 8.6,MariaDB,MySQL2 / promise和classes。但它不起作用:
以下是一个简单的例子:
const mysql = require('mysql2/promise');
class mySQLClass {
constructor() {
this.mysqlConn = null;
}
async initialize() {
try {
this.mysqlConn = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'myschema'
});
console.log('intialize complete - createConnection successful: ');
} catch (err) {
console.log('initialize failed: ' + err);
}
}
async showMeSomeData() {
try {
const [rows, fields] = await this.mysqlConn.execute('select * from information_schema.tables where table_schema = \'information_schema\'');
console.log('data: ' + rows);
} catch (err) {
console.log('showMeSomeData failed: ' + err);
}
}
}
const test = new mySQLClass();
test.initialize();
test.showMeSomeData();
当我运行程序时,它失败了:
showMeSomeData失败:TypeError:无法读取属性'execute'of null
初始化完成 - createConnection成功
因此,似乎在showMeSomeData()执行之前,initialize()没有完成。我认为等待会让它正常工作吗?
我错过了什么吗? 有更好的方法吗?
由于
答案 0 :(得分:0)
在顶层,异步函数仍然返回一个promise。你必须这样做:
echo -e "\n..."
要让您的代码正常工作,您必须在课堂上隐藏额外的承诺:
const test = new mySQLClass();
test.initialize().then(() => {
test.showMeSomeData();
});
如果你想获取数据,你仍然必须在顶层使用promises,但你的console.logs至少会在带内发生。