我正试图为一个Express API
构建一个日志,但是在获取要注销的数据时遇到了问题。
我可以在req
块中记录原始的res
和finally
对象,但不确定如何访问SQL response
。
const sql = require("mssql")
const config = require("../config")
router.get("/express-route", (req, res) => {
sql.connect(config.properties).then(pool => {
return pool.request()
.input('username', sql.NVarChar(32), req.params.username)
.execute('do_something_with_username')
.then(response => res.send(response) // pass this response
.catch(err => res.send(err))
.finally(() => {
console.log('response', response) // to here
sql.close()
})
})
}
如何从第一个then
块获得响应,并将其传递给finally
块以用于另一个函数?
发布于 2019-07-10 12:39:54
最终回调不会收到任何论据,因为没有可靠的方法来确定承诺是实现了还是被拒绝了。这个用例正是当您不关心拒绝原因或实现价值时,所以没有必要提供它。(mdn)
相反,只需使用.then
const sql = require("mssql")
const config = require("../config")
router.get("/express-route", (req, res) => {
sql.connect(config.properties).then(pool => {
return pool.request()
.input('username', sql.NVarChar(32), req.params.username)
.execute('do_something_with_username')
.then(response => {res.send(response); return response;}) // pass this response
.catch(err => res.send(err))
.then(response => {
console.log('response', response) // to here
sql.close()
})
})
}
发布于 2019-07-10 12:45:07
实际上,您可以通过在异步函数中编写代码来简化事情。
const sql = require("mssql")
const config = require("../config")
router.get("/express-route", (req, res) => {
sql.connect(config.properties).then(async pool => {
try {
const response = await pool.request()
.input('username', sql.NVarChar(32), req.params.username)
.execute('do_something_with_username');
// do another request
const otherResponse = await pool.request() ... ;
res.send(response);
} catch (err) {
res.send(err);
} finally {
sql.close();
}
})
}
这允许您以更线性的方式编写代码。
https://stackoverflow.com/questions/56978256
复制