如何在不返回任何数据的情况下操作承诺中的对象属性?

问题描述 投票:0回答:0

我想做什么: 我想写一个对象方法从 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"}

javascript async-await promise javascript-objects
© www.soinside.com 2019 - 2024. All rights reserved.