[英]How can Redux guarantee no race condition?
我最近了解了Redux。
我很好理解這個概念,但我在官方文檔中沒有弄清楚這一行:
因為所有的變化都是集中的,並且按照嚴格的順序逐個發生,所以沒有細微的競爭條件需要注意。
Redux如何保證不會出現微妙的競爭條件?
實際上,我可以想象這種情況(按順序):
因此,動作創建者調度將按順序應用,但這些動作創建者的實現可能不會按順序應用,可能導致非確定性代碼。
如何弄清楚報價?
我可以理解,對於Redux,有一種關於調度操作歷史的跟蹤 (有助於在運行時理解程序工作流),但這些操作的實際實現又如何呢?
Javascript是線程安全的,因此2個函數不能同時運行。
Redux不了解異步操作,它只關心當前狀態,調度給它的事件以及如何在給定事件的情況下將當前狀態轉換到某個其他狀態。
因此,確保行動調度順序是您的責任,這不是Redux的責任。
如果有兩個事件,X和Y,並且您希望在處理X之前阻止處理Y,那么您可以使用某些狀態屬性在Redux狀態中跟蹤它。 因此,您可以輕松地防止在處理X之前處理Y.
對於異步操作和人們可能希望應用的錯誤處理有太多不同的要求。 因此很難為你所談論的“競爭條件”提供一般解決方案。
設計您的系統,查找所有邊緣案例,並為您可以擁有的每個邊緣案例創建新的事件/事件名稱/事件處理。 然后在redux減速器中處理它們,進行適當的狀態轉換。 在Web應用程序中,沒有什么是致命錯誤(要求用戶刷新瀏覽器不是一個好的UI / UX),因此您必須從每個可能的邊緣情況中恢復,因此拋出錯誤沒有多大意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.