FirebaseExtended / FirebaseExtended/reactfire

Error recovery: no retry path once an observable cache entry errors

Ouverte
#742 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
v5
Langage dominant
TypeScript
Étoiles
3.6k
Forks
403
Merge moyen
14 h 53 min
PR mergées (30 j)
5

Description

## 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.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par preloadObservable et le cache global preloadedObservables, puis suivez le comportement d’erreur et de réinitialisation de SuspenseSubject à travers le chemin d’état non-Suspense du hook. C’est terminé lorsqu’un chemin de retry ou de reset convenu permet à une entrée en erreur de récupérer avec le même observableId, sans nécessiter un autre ID ni un contournement par remount.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
firebase, react, typescript
Domaine
frontend
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
Calme
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.