gpt4 book ai didi

javascript - 使用finally() 正确构建Javascript Promise

转载 作者:行者123 更新时间:2023-12-01 00:50:53 25 4
gpt4 key购买 nike

我正在构建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com