【发布时间】:2016-05-03 17:04:35
【问题描述】:
我有一个函数调用另一个函数,该函数连接到数据库以获取一些值。在执行完成之前,我无法继续进行,因为该值将用于数据库上的另一个事务。
我使用yield 来确定该方法的完成,并使用promise 来解决或拒绝响应。我就是这样做的:
co(function*() {
rec.x = yield getX(a, b);
//use rec to update something else
conn.update(rec);
}).catch((err) => {
console.error(err.stack)
});
function getX(a, b) {
return conn.getVal(a, b);
}
exports.getVal = function(a, b) {
return sql.connect(connStr).then(function() {
return new sql.Request()
.input('a', sql.VarChar(100), a)
.input('b', sql.VarChar(50), b)
.execute('someProc').then(function(recordSet) {
return Promise.resolve(recordSet[0][0]);
});
});
};
我收到此错误:
ConnectionError: Connection is closed.
at node_modules/mssql/lib/main.js:1613:17
at doNTCallback0 (node.js:417:9)
at process._tickCallback (node.js:346:13)
编辑
连接字符串:
Uname:pass@server/database
【问题讨论】:
-
在 node_modules/mssql/lib/main.js: 1613 :17 你发布的代码中哪一行是第 1613 行
-
请求是否可以在不通过生成器/yield 的情况下工作?意思是,如果你直接调用
getVal函数,它会起作用吗? -
你能在帖子中分享你的连接字符串吗?
-
@Freyday 是的。该请求在没有产量的情况下可以正常工作..
-
如果您将
sql.connect(conStr)分配给connection变量,然后将connection像sql.Request(connection)一样传递给sql.Request(),会发生什么?你也遇到同样的错误吗?
标签: javascript node.js promise generator co