我正在尝试使用Typescript ES6类模块实现Oracle连接。
我已经安装了@types/oracledb包以及oracledb包。使用Jasmin框架。
下面是我已经实现的代码。
import * as oracledb from 'oracledb';
export class ConnectionDAO{
/**
* Connection Variable Declaration
*/
conn;
/**
* Result Variable Declaration
*/
result;
/**
*
* Creates an instance of CommercialDAO.
* To Initiate Connection and Make the connection utilized by @memberof CommercialDAO
* @memberof CommercialDAO
*/
constructor() {
this.conn = oracledb.getConnection({
user: "commercial",
password: "oracle",
connectString: "localhost/COMMERCIALDB"
});
}
public getRwCnt() {
return new Promise(async function(resolve, reject) {
try {
let result = this.conn.execute('SELECT TESTCASEID FROM EXECUTE_TESTCASE');
resolve(this.result.rows.length);
} catch (err) { // catches errors in getConnection and the query
reject(err);
}
this.conn.release();
});
}
}
错误:
TypeError: this.conn.execute is not a function
但在这个代码连接本身没有得到存储在'这。连接变量。
有没有办法避免promise和async函数?是否有其他解决方案来实现这一点?请提供您宝贵的解决方案和建议。应为示例代码段。
4条答案
按热度按时间pbwdgjma1#
你犯错误的真正原因
是因为这个。conn很可能是未定义的。加一张这样的支票。
但这只会突出你有问题,而不会告诉你为什么。
原因是你的构造函数是严格同步的。考虑让一个函数等待构造函数完成。
下面是一个有效的版本:
使用ts-node运行此命令会得到以下结果
t3psigkw2#
似乎你用错误的方式在函数
getRwCnt()
中使用this
。记住JavaScript中的每个函数都有self
this
。选项1将最上面的
this
赋值给函数开头的另一个变量选项2使用ES6箭头功能
tmb3ates3#
我尝试了你的解决方案,但看起来像 typescript 是不是等待电话等待我。connectionPromise;也不确定连接是否成功。我正在低于输出。
mfpqipee4#
我也有同样的问题。替换了我的导入:
与
帮我修好了