así que este es mi código para la clase y lo que estoy tratando de hacer con él
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) })();así que estoy tratando de encadenar a los métodos de clase (getDbData().getTablespace()) para que no tenga que llamar a la base de datos externa más de una vez. pero recibo el siguiente error: (nodo: 14468) UnhandledPromiseRejectionWarning: TypeError: newDb.getDbData(...).getTablespace no es una función . ¿Es esto posible o es algo que no entiendo porque soy un novato en la programación asíncrona? he intentado devolver {this, data} para el método getDbData(), pero no funcionó
No estoy seguro de si "anidar" es el término correcto aquí, parece que está tratando de llamar a un método desde el otro. La forma correcta de hacerlo es
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; } }Entonces no encadenarías nada, sino que simplemente llamarías
const x = await newDb.getTablespace(); console.log(x);