FirebaseExtended / FirebaseExtended/reactfire
Error recovery: no retry path once an observable cache entry errors
- Ngôn ngữ chính
- TypeScript
- Star
- 3.6k
- Fork
- 403
- Merge trung bình
- 14 giờ 53 phút
- Pull request đã merge (30 ngày)
- 5
Mô tả
## Problem
Once a reactfire hook enters `status: 'error'`, there is no way to recover without remounting with a different `observableId`.
The errored `SuspenseSubject` stays in the global `preloadedObservables` cache under its `observableId`. On error, the 30-second reset timer is cancelled (it becomes a no-op timeout), and the observable does not re-subscribe. A component that remounts with the same `observableId` rejoins the same errored subject and immediately receives `status: 'error'` again.
This became user-visible in v4.3.0, which made `status: 'error'` reachable in non-suspense mode (previously errors always threw, so the stuck state was hidden). Users building `status === 'error'` UI now have no way to trigger a retry.
## Current workaround
Change the `observableId` passed to the hook. This causes `preloadObservable` to create a fresh `SuspenseSubject` and re-subscribe to the source. Not a real API — just an escape hatch.
## What a fix might look like
- An explicit `retry()` / `reset()` function returned from the hook, or
- A `retryOnError` option that re-subscribes automatically after a delay, or
- Cache eviction on error after the reset timeout (restoring the pre-v4.3 behavior for the cache entry, not for error surfacing)
The right shape is an open question. Filing to track the gap.
Closes none. Related to #735.
Hướng dẫn đóng góp
Hướng nghiên cứu
Start at preloadObservable and the global preloadedObservables cache, then trace SuspenseSubject error and reset behavior through the hook's non-suspense status path. Done means an agreed retry or reset path lets an errored entry recover with the same observableId, without requiring a different ID or remount workaround.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- firebase, react, typescript
- Lĩnh vực
- frontend
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 35/100