0
场景: 使用mssql我连接到sql并检索id列表,然后根据那些id我想运行存储过程。我目前正在做的是运行第一个存储过程,将ID存储在一个数组中,然后运行一个for循环调用另一个模块,在那里传递id来运行存储过程。这可以正常工作,当我有一个单一的ID,但失败'全局连接已经存在。首先调用sql.close()。'当我尝试运行多个。如何在节点j中的循环中查询SQL
如何创建连接到SQL,运行我的查询,然后运行下一个?什么是最好的方法?
下面的代码运行带有ID的存储过程并导致上述错误。
exports.runStoredProc = function (query,id) {
sql.connect(config.config).then(()=>{
return sql.query`${query} ${id}`
}).then(res=> {
do something with the response
}).catch(error => {
console.log(error)
})
}
看起来像下面一段代码使用下一个ID运行它时仍然存在连接。我认为创建Promise会在它再次运行上面的代码之前强制等待执行?
let toRun = result.recordset.length
let gen = async num => {
for(let i=0;i<num;i++) {
var resp = result.recordset[i].id
console.log(i, resp)
var sp = report
var reportId = await new Promise(() => db.runStoredProc(sp,resp))
}
}
gen(toRun).then(() => console.log("done!"))
'=等待新的承诺(()=> db.runStoredProc(SP ,resp))'不起作用。我不确定你的想法。 –