在 JavaScript 中嵌套异步 class 方法/函数

Nesting async class methods / functions in JavaScript

所以这是我的 class 代码以及我想用它做什么

const getExternalDbInfo = require('./helperJS/get-external-db-info')
class ExternalDb {
    constructor(extdb_user, extdb_password, extdb_privilege, extdb_ip, extdb_port, extdb_sid) {
        this.extdb_user = extdb_user,
        this.extdb_password = extdb_password,
        this.extdb_privilege = extdb_privilege,
        this.extdb_ip = extdb_ip,
        this.extdb_port = extdb_port,
        this.extdb_sid = extdb_sid
    }
    async getDbData(){
        let data=await getExternalDbInfo(this.extdb_user, this.extdb_password, this.extdb_privilege, this.extdb_ip, 
            this.extdb_port, this.extdb_sid);
        return this;
    }
    async getTablespace(){
        console.log(  getDbData().tablespace_data)
        return  getDbData().tablespace_data

    }
}

const newDb= new ExternalDb("***");

(async function () {
    let x =await newDb.getDbData().getTablespace()
console.log(x)
})();

所以我试图链接到 class 方法 (getDbData().getTablespace()),这样我就不必多次调用外部数据库。但我收到以下错误:(node:14468) UnhandledPromiseRejectionWarning: TypeError: newDb.getDbData(...).getTablespace 不是函数。这是可能的还是我不理解,因为我是异步编程的菜鸟。 我已经尝试为 getDbData() 方法返回 {this, data},但没有成功

不确定“嵌套”在这里是否正确,听起来您正试图从另一个调用一个方法。正确的做法是

class ExternalDb {
    …
    async getDbData(){
        const data = await getExternalDbInfo(this.extdb_user, this.extdb_password, this.extdb_privilege, this.extdb_ip, this.extdb_port, this.extdb_sid);
        return data;
//             ^^^^
    }
    async getTablespace(){
        const data = await this.getDbData();
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        console.log(data);
        return data.tablespace_data;
    }
}

然后你就不会链接任何东西,而只需调用

const x = await newDb.getTablespace();
console.log(x);