在 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);
所以这是我的 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);