从 javascript promise (expressjs + neDB) 中提取函数
Posted
技术标签:
【中文标题】从 javascript promise (expressjs + neDB) 中提取函数【英文标题】:Extract function from javascript promise (expressjs + neDB) 【发布时间】:2020-09-10 13:02:42 【问题描述】:以下代码正在运行并从我的 neDB-promises 中检索所有用户:
const getUsers = (res) => db.find() .sort( name: 1 ) .exec() .then( (content) => res.status(200).json(content); , (err) => res.status(400).json(err); ); ;
我正在尝试做的事情:优化这段代码以避免将来重复 CRUD 函数,如下所示:
... .then(successFunctionCall, failureFunctionCall) ...
我曾考虑创建一个名为 successFunctionCall/failureFunctionCall 的单独模块,但我需要在其中调用 res 来设置响应 JSON 和状态码。这是实现这一目标的更好方法吗?
谢谢。
【问题讨论】:
【参考方案1】:您可以curry 函数。当您将它们用作处理程序时,传递res
,并获得一个等待content
或err
的新函数:
const successFunctionCall = res => content =>
res.status(200).json(content);
const failureFunctionCall = res => err =>
res.status(400).json(err);
const getUsers = (res) =>
db.find()
.sort( name: 1 )
.exec()
.then(
successFunctionCall(res),
failureFunctionCall(res)
);
;
【讨论】:
【参考方案2】:为了避免 CRUD 函数的重复,您的关注点可能会有所不同。以下是我的意思的基本概念。
const usersDb = // your users db instance here
const findAllSortedBy = db => (...args) => db.find().sort(...args).exec()
const findAllUsersSortedBy = findAllSortedBy(usersDb)
const success = res => content => res.status(200).json(content)
const failure = res => err => res.status(400).json(err)
const getUsers = res =>
findAllUsersSortedBy( name: 1 )
.then(success(res))
.catch(failure(res))
这里是 getUsers
在快速路由处理程序的上下文中
const getUsers = (req, res) =>
findAllUsersSortedBy( name: 1 )
.then(success(res))
.catch(failure(res))
router.get('/users', getUsers)
【讨论】:
以上是关于从 javascript promise (expressjs + neDB) 中提取函数的主要内容,如果未能解决你的问题,请参考以下文章
javascript异步编年史,从“纯回调”到Promise
异步JavaScript的演化史:从回调到Promise再到Async/Await