我正在构建一个 Express
使用 mssql
构建的 API包。
如果我不打电话sql.close()
然后我收到以下错误:
Error: Global connection already exists. Call sql.close() first.
我想让端点易于遵循和维护,并且喜欢使用 finally
的以下模式 promise 模式。
const sql = require("mssql")
const config = require("../config")
sql.connect(config.properties).then(pool => {
return pool.request()
.execute('chain')
.then(response => {
res.send(response['recordsets'][0][0]['response'])
})
.catch(err => res.send(err))
.finally(sql.close())
})
但是,这会生成以下错误:
{ "code": "ENOTOPEN", "name": "ConnectionError" }
下面的代码可以工作,但是定义 sql.close
似乎有点笨拙在同一个函数中多次使用。
sql.connect(config.properties).then(pool => {
return pool.request()
.execute('chain')
.then(response => {
res.send(response['recordsets'][0][0]['response'])
sql.close()
})
.catch(err => {
res.send(err)
sql.close()
})
})
有办法调用 sql.close
在使用 res.send
发送响应或错误后作为 promise 链的一部分?
最佳答案
.finally 接受函数,传递函数结果
sql.connect(config.properties).then(pool => {
return pool.request()
.execute('chain')
.then(response => {
res.send(response['recordsets'][0][0]['response'])
})
.catch(err => res.send(err))
.finally(() => sql.close()) // FIX HERE
})
关于javascript - 使用finally() 正确构建Javascript Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56976369/