Query State Machine
FloppyDisk tracks two things separately:
- Is it running? โ
isPending - What's the result? โ
state
They are independent.
This is how the query state transition flow looks like:
initial failed, won't retry
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ isPending: false โ โ โ isPending: false โ
โ isRevalidating: false โ โ isRevalidating: false โ
โ โ โโโโโโโโโโโโโโโโโโโโถ โ โ
โ state: "INITIAL" โ โ โ โ state: "ERROR" โ
โ isSuccess: false โ โ โ isSuccess: false โ
โ data: undefined โ โ โ data: undefined โ
โ dataUpdatedAt: undefined โ โ โ dataUpdatedAt: undefined โ
โ dataStaleAt: undefined โ โ โ dataStaleAt: undefined โ
โ isError: false โ โ โ โ isError: true โ
โ error: undefined โ โ โ โ error: <TError> โ
โ errorUpdatedAt: undefined โ โ โ โ errorUpdatedAt: <number> โ
โ โ โ โ โ
โ willRetryAt: undefined โ โ โ willRetryAt: undefined โ
โ isRetrying: false โ โ โขโ isRetrying: false โ
โ retryCount: 0 โ โ โขโ retryCount: 0 (reset) โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ execute โ
โผ โ waiting retry delay
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ (N) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ isPending: true [ฦ]โ โ โ โ isPending: false โ
โ isRevalidating: false โ fail โ โ isRevalidating: false โ
โ โโโโโโโโโโโโถ Should retry? โโโโ(Y)โโโโโถ โ โ
โ state: "INITIAL" โ โฒ โ state: "INITIAL" โ
โ isSuccess: false โ โ โ isSuccess: false โ
โ data: undefined โ โ โ data: undefined โ
โ dataUpdatedAt: undefined โ โ โ dataUpdatedAt: undefined โ
โ dataStaleAt: undefined โ โ โ dataStaleAt: undefined โ
โ isError: false โ โ โ isError: false โ
โ error: undefined โ โ โ error: undefined โ
โ errorUpdatedAt: undefined โ โ โ errorUpdatedAt: undefined โ
โ โ โ โ โ
โ willRetryAt: undefined โ โ โ โ willRetryAt: <number> โ
โ isRetrying: false โ โ โ isRetrying: false โ
โ retryCount: 0 โ โ โ retryCount: <number> โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ โ โ
โ success โ โ retrying
โผ โ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ isPending: false โ โ โ โ isPending: true [ฦ]โ
โ isRevalidating: false โ โ fail โ isRevalidating: false โ
โ โ โโโโโโโโโโโโโโโโโโโโโโค โ
โ โ state: "SUCCESS" โ โ state: "INITIAL" โ
โ โ isSuccess: true โ โ isSuccess: false โ
โ โ data: <TData> โ โ data: undefined โ
โ โ dataUpdatedAt: <number> โ โ dataUpdatedAt: undefined โ
โ โ dataStaleAt: <number> โ โ dataStaleAt: undefined โ
โ isError: false โ โ isError: false โ
โ error: undefined โ โ error: undefined โ
โ errorUpdatedAt: undefined โ success โ errorUpdatedAt: undefined โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ willRetryAt: undefined โ โ โ willRetryAt: undefined โ
โขโ isRetrying: false โ โ โ isRetrying: true โ
โขโ retryCount: 0 (reset) โ โ โ retryCount: <number> (+1) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโAnd then after success:
success failed, won't retry
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ isPending: false โ โ โ isPending: false โ
โ isRevalidating: false โ โ โ isRevalidating: false โ
โ โ โโโโโโโโโโโโโโโโโโโโถ โ โ
โ state: "SUCCESS" โ โ โ โ state: "SUCCESS_BUT_REVALIDATION_ERROR" โ
โ isSuccess: true โ โ โ isSuccess: true โ
โ data: <TData> โ โ โ data: <TData> โ
โ dataUpdatedAt: <number> โ โ โ dataUpdatedAt: <number> โ
โ dataStaleAt: <number> โ โ โ dataStaleAt: <number> โ
โ isError: false โ โ โ isError: false โ
โ error: undefined โ โ โ โ error: <TError> โ
โ errorUpdatedAt: undefined โ โ โ โ errorUpdatedAt: <number> โ
โ โ โ โ โ
โ willRetryAt: undefined โ โ โ willRetryAt: undefined โ
โ isRetrying: false โ โ โขโ isRetrying: false โ
โ retryCount: 0 โ โ โขโ retryCount: 0 (reset) โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ revalidate โ
โผ โ waiting retry delay
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ (N) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ isPending: true [ฦ]โ โ โ โ isPending: false โ
โ โ isRevalidating: true โ fail โ โ โ isRevalidating: false โ
โ โโโโโโโโโโโโถ Should retry? โโโโ(Y)โโโโโถ โ โ
โ state: "SUCCESS" โ โฒ โ state: "SUCCESS" โ
โ isSuccess: true โ โ โ isSuccess: true โ
โ data: <TData> โ โ โ data: <TData> โ
โ dataUpdatedAt: <number> โ โ โ dataUpdatedAt: <number> โ
โ dataStaleAt: <number> โ โ โ dataStaleAt: <number> โ
โ isError: false โ โ โ isError: false โ
โ error: undefined โ โ โ error: undefined โ
โ errorUpdatedAt: undefined โ โ โ errorUpdatedAt: undefined โ
โ โ โ โ โ
โ willRetryAt: undefined โ โ โ โ willRetryAt: <number> โ
โ isRetrying: false โ โ โ isRetrying: false โ
โ retryCount: 0 โ โ โ retryCount: <number> โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ โ โ
โ success โ โ retrying
โผ โ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ isPending: false โ โ โ โ isPending: true [ฦ]โ
โ โ isRevalidating: false โ โ fail โ โ isRevalidating: true โ
โ โ โโโโโโโโโโโโโโโโโโโโโโค โ
โ state: "SUCCESS" โ โ state: "SUCCESS" โ
โ isSuccess: true โ โ isSuccess: true โ
โ โ data: <TData> โ โ data: <TData> โ
โ โ dataUpdatedAt: <number> โ โ dataUpdatedAt: <number> โ
โ โ dataStaleAt: <number> โ โ dataStaleAt: <number> โ
โ isError: false โ โ isError: false โ
โ error: undefined โ โ error: undefined โ
โ errorUpdatedAt: undefined โ success โ errorUpdatedAt: undefined โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ willRetryAt: undefined โ โ โ willRetryAt: undefined โ
โขโ isRetrying: false โ โ โ isRetrying: true โ
โขโ retryCount: 0 (reset) โ โ โ retryCount: <number> (+1) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ