我正在尝试使用nodejs的mssql包中的事务类。因此,当我在http://www.dotnetcurry.com/nodejs/1238/connect-sql-server-nodejs-mssql-package上阅读时,我做了以下事情:
Db.prototype.transaction = function() {
return new Promise((resolve, reject) => {
pool.connect().then(conn => {
let transaction = new mssql.Transaction(conn).begin().then(() => {
new mssql.Request(transaction).query("SELECT * FROM ParkingSlot").then(() => {
transaction.commit().then((recordset) => {
conn.close();
resolve(recordset);
}).catch(reject)
}).catch(reject);
}).catch(reject)
});
});
};
在调用者函数上,我做db.transaction().then(console.dir);
输出一个控制台的任何结果。但没有任何事情发生。
答案 0 :(得分:0)
这是因为我在链上使用的mssql的某些函数没有返回任何内容,因此当promise未决时,他将无需任何操作,因为它可以在主调用中的catch链上看到。
其次,对于使用带有事务的nodejs的mssql,连接必须始终是打开的(所以对于我的情况,在构造函数中),我只需要处理事务。
最后,我不必使用新对象创建我的请求或事务。 ConnectionPool :: transaction或ConnectionPool :: Request
可以检索新实例所以这是最终的代码:
transaction(q) {
return new Promise((resolve, reject) => {
let t = connexion.transaction()
t.begin().then(() => {
let r = t.request();
r.query(q).then((recordset) => {
//console.log(recordset)
t.commit().then((re) => {
conn.close();
}).catch(reject);
resolve(recordset);
})
});
});
}
请注意,代码语法不同,因为我传递了ES6类语法,更易读。