我目前正在开发一个API /路由器,要将其集成到用户自己的Web服务器中。我的代码将执行所需的工作,但也允许用户实现自己的逻辑,如此片段:myApi.on('action', (err, result, req, res) => {/*user's logic here*/})
。
根据设计,如果用户决定覆盖默认行为并实现自己的逻辑,我的代码将不会结束响应。这是为了允许请求和响应流传到下一个中间件函数,如果用户希望的话。
我想要的控制流程是:
运行我的初始路由逻辑
运行用户自定义逻辑
如果响应尚未结束,则将控制权传递给下一个中间件函数
我的问题出现在当用户想要实现任何异步逻辑时。在将控制权传递给下一个中间件函数之前,我无法让用户的自定义逻辑得到结论。我认为这是因为我设置的接口。我希望用户尽可能少地处理繁琐的工作。这意味着我更喜欢不传递给用户类似于callback()
或next()
函数的等效物,因为他们需要在其逻辑的每个端点调用它(由于我的路由器涉及许多不同的路由)。
我研究了一些 promise wrappers,例如 promisify-node,但它们似乎只能包装以回调作为最终参数的函数。我还考虑要求用户从其自定义实现中返回一个promise,但这与我不想要求繁琐/样板代码的愿望相矛盾。
是否有使用 promises 或其他结构的方法,可以解决这个异步问题,而不必让用户感到痛苦?