我想做什么: 我想写一个对象方法从 MySql 数据库中获取数据,并根据 MySql 查询的结果设置对象属性。
我已经使用异步、等待和承诺实现了这种行为。但我不确定这是否是在
async fetchGame(id)
. 中创建的承诺中操作对象属性的正确方法
我的实际问题是: 这是正确的做法吗?我应该如何检查对象属性是否设置正确并返回
resolve('done')
或resolve('error')
?
代码结构:
我有一个具有属性 id、player1 和 player2 的
Game
类和一个名为 async fetchGame(id)
的方法。
Game
对象在另一个名为 index.js 的文件中初始化。
数据库连接在 mySqlConnection.js 中初始化。
请注意,正确的 try、catch 错误处理尚未实现。
object.js:
const db = require('../mySqlConnection');
class Game{
constructor(){
this.id = null;
this.player1 = null;
this.player2 = null;
}
async fetchGame(id){
return new Promise(async (resolve, reject) => {
const sql = "SELECT * FROM `games` WHERE `id`=" +id
let data = await db.promise(sql);
this.id = data[0].id;
this.player1 = data[0].player1;
this.player2 = data[0].player2;
if(this.id != null){
resolve("done");
} else{
reject("error")
}
});
}
}
mySqlConnection.js:
db.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
db.promise = (sql) => {
return new Promise((resolve, reject) => {
db.query(sql, (err, result) => {
if(err){
reject(new Error());
}
else{
resolve(result);
}
});
});
};
module.exports = db
index.js:
async function createGame(){
var firstGame = new Game()
await firstGame.fetchGame(1)
console.log("index.js: " +JSON.stringify(firstGame))
}
createGame();
console.log 输出(如预期):
index.js: {"id":1,"player1":"NameOfPlayer1","player2":"NameOfPlayer2"}