我正在嘗試創建一個阻塞控制流,但已經達到了死衚衕。 這個想法是,一個請求進入並流經一些處理函數。每個函數都會執行某些操作並決定是否已完成請求。如果是,則停止處理,否則調用下一個處理程序。每個處理程序可能會或可能不會異步執行某些操作(如讀取/寫入數據)。如果是這樣的話,那麼下面的處理程序在啓動之前依賴於那裏的數據。在NodeJS中實現阻塞控制流程
到目前爲止,我有兩個想法,它們都不完全符合這些要求: 1)所有的處理程序都是函數,它們被推入一個數組並重復執行some
。如果處理程序希望停止控制流程,則只需返回true
。 使用這種方法,我不能有任何處理程序調用異步函數。
2)所有的處理程序都是鏈接的承諾。這對我來說似乎是一個更好的主意,但我無法弄清楚如何最好地處理停止控制流。我有兩個想法: - 一旦處理程序決定中斷流程,請保留設置爲true
的變量。如果需要,請在每個處理程序中檢查此值並立即解決。這意味着很多重複的代碼。 - 拒絕承諾,如果它不希望繼續正常流程,並繼續在catch
。然而,使用錯誤作爲控制流程的手段的想法讓我很痛苦 - 這也意味着我必須處理由於實際錯誤而調用catch的情況。
我的spidey感覺告訴我必須有另一種方式,但我無法弄清楚。
一些Promise實現,如'bluebird',提供[承諾取消](http://bluebirdjs.com/docs/api/cancellation.html)。 – robertklep
基本上,你要求尋找monad。哪些承諾或多或少是。我建議[這次談話](https://fsharpforfunandprofit.com/rop/),儘管它是專門針對節點的。對於一個實際的答案,我認爲使用拒絕來阻止流量很好。沒有什麼說明它意味着「一個錯誤」,這只是一個語義約定 – Jonah
編輯限制後的錯字:上面應該有專門說的_not_節點... – Jonah