我目前正在使用一個將被集成到用戶自己的Web服務器中的API /路由器。我的代碼將完成所需的工作,但也允許用戶在之後實現自己的邏輯,例如以下片段:myApi.on('action', (err, result, req, res) => {/*user's logic here*/})
。如何promisify一個不包含回調參數的函數?
按照設計,如果用戶決定重寫默認行爲並實現自己的邏輯,我的代碼將不會結束響應。這是爲了允許請求和響應在用戶需要時進入下一個中間件功能。
我想要的控制流程是:
運行我的初始路徑邏輯
運行用戶的自定義邏輯
控制傳遞給下一個中間件的功能,如果反應還沒有已結束
我的問題出現時用戶想要實現任何異步邏輯。在將控制權交給下一個中間件功能之前,我無法讓用戶的自定義邏輯結束。我相信這是因爲我設置的界面。我希望用戶儘可能做一些小工作。這意味着我不希望向用戶傳遞一些他們需要在其邏輯的每個端點上調用的功能(因爲我的路由器涉及許多不同的路由),因此不需要傳遞相應的功能callback()
或next()
。
我已經看過承諾包裝如promisify-node,但他們似乎只能包裝函數,將回調作爲他們的最終參數。我也考慮要求用戶從自定義實現中返回一個承諾,但這違背了我不希望繁忙/樣板代碼的願望。
有什麼方法可以使用承諾 - 或任何其他構造 - 我可以處理這個異步問題,而不必痛苦用戶?
如何定義請求結束? – Amit
@Amit,似乎我切換了請求和響應。我會通過檢查res.finished標籤來檢查**響應**是否完成。 – TheKingOfTyrants