我目前正在使用一个将被集成到用户自己的Web服务器中的API /路由器。我的代码将完成所需的工作,但也允许用户在之后实现自己的逻辑,例如以下片段:myApi.on('action', (err, result, req, res) => {/*user's logic here*/})
。如何promisify一个不包含回调参数的函数?
按照设计,如果用户决定重写默认行为并实现自己的逻辑,我的代码将不会结束响应。这是为了允许请求和响应在用户需要时进入下一个中间件功能。
我想要的控制流程是:
运行我的初始路径逻辑
运行用户的自定义逻辑
控制传递给下一个中间件的功能,如果反应还没有已结束
我的问题出现时用户想要实现任何异步逻辑。在将控制权交给下一个中间件功能之前,我无法让用户的自定义逻辑结束。我相信这是因为我设置的界面。我希望用户尽可能做一些小工作。这意味着我不希望向用户传递一些他们需要在其逻辑的每个端点上调用的功能(因为我的路由器涉及许多不同的路由),因此不需要传递相应的功能callback()
或next()
。
我已经看过承诺包装如promisify-node,但他们似乎只能包装函数,将回调作为他们的最终参数。我也考虑要求用户从自定义实现中返回一个承诺,但这违背了我不希望繁忙/样板代码的愿望。
有什么方法可以使用承诺 - 或任何其他构造 - 我可以处理这个异步问题,而不必痛苦用户?
如何定义请求结束? – Amit
@Amit,似乎我切换了请求和响应。我会通过检查res.finished标签来检查**响应**是否完成。 – TheKingOfTyrants