Deliver Observable read values as microtasks instead of after a timer
I maintainer di solito rispondono entro 3 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 74/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- angular, typescript
- Ambito
- api
Direzione di ricerca
Start with src/zones.ts:82 and the ɵzoneWrap path described in the issue; check how schedulers.insideAngular is used by the Observable wrappers. Add or update tests for the timing behavior, including a wrapped Subject and the affected compat streams. Done means values reach subscribers in a microtask after the current task, not synchronously or after a timer.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Version info
Angular: 22.2
Firebase: 12.19.0
AngularFire: 22.0.0-rc.0, and main
Description
Every Observable-returning read waits one timer turn before its subscriber sees a value:
ɵzoneWrappipes those reads (collectionData,docData,authState,user,objectVal,listVal,fromTask, the Remote Configget*Changesstreams, 34 wrappers across the modular modules including Firestore Lite) throughobserveOn(schedulers.insideAngular).- That scheduler is built over rxjs
asyncScheduler(src/zones.ts:82), which defers withsetInterval, so each value reaches the subscriber one macrotask after Firebase handed it over. - For Firestore that is a second timer: the SDK already hands each snapshot to its callback inside a
setTimeout(0). - The scheduler came in with #2243 (merged 2020), and the comment that PR added requires that emissions are never synchronous. rxjs's
AsapScheduler, which defers withPromise.resolve().then, meets that requirement and delivers at the next microtask checkpoint, before any timer.
The compat layer is affected:
- The
AngularFireAuthstreamsauthState,userandcredentialdeliver through the same scheduler instance and inherit whichever timing it has. AngularFireFunctionsandAngularFireMessaginguse it only to hand over the SDK instance before their work starts, so their results are not delivered through it.- Compat Database and Firestore deliver through
schedulers.outsideAngularand are not part of this.
How to reproduce these conditions
On a fresh Angular 22.2 app with @angular/fire@next, wrap a Subject with the real ɵzoneWrap, subscribe, and at the moment the source emits register a setTimeout(0) and a queueMicrotask:
- When the subscriber runs, the timer has already fired, in a zone.js app and a zoneless one, in Chrome and Firefox.
- The real
collectionDataagainst the Firestore emulator and the compatauthStateagainst the Auth emulator behave the same way in Chrome. - With an
AsapSchedulerin place ofasyncScheduler, the microtask has fired and the timer has not, in every one of those runs.
Expected behavior
A value Firebase produced is handed to the subscriber as soon as the current task finishes, without an extra timer turn.
Actual behavior
Every value waits for a setInterval callback.
- Lingua principale
- TypeScript
- Stelle
- 7.8k
- Fork
- 2.2k
- Merge medio
- 2g 12h
- PR unite (30g)
- 24
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di angular/angularfire
-
Document the 22.0.0-rc.1 changesForse già presa @armando-navarro l’ha presa 2 giorni fa. Apertacomp: docs type: chore
Difficoltà 3/5 Mezza giornata Idoneità per principianti 18/100
angular/angularfire#3834 ·
I maintainer di solito rispondono entro 3 giorni
-
Accept firebase 13 in @angular/fire 22Forse già presa @armando-navarro l’ha presa 3 giorni fa. Apertacomp: core comp: schematics type: feature
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
angular/angularfire#3830 ·
I maintainer di solito rispondono entro 3 giorni
-
`ɵzoneWrap` ignores a handler passed as an observer object, and holds a wrapped promise forever once its injector is destroyedForse già presa @armando-navarro l’ha presa 3 giorni fa. Apertacomp: app-check comp: core comp: firestore comp: remote-config comp: zones type: bug version: current (v17+)
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
angular/angularfire#3828 ·
I maintainer di solito rispondono entro 3 giorni
-
Eleven wrapped callbacks and remote-config `isSupported` hold the app unstable until something that may never happenForse già presa @armando-navarro l’ha presa 4 giorni fa. Apertacomp: app-check comp: core comp: database comp: remote-config comp: ssr comp: zones type: bug version: current (v17+)
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
angular/angularfire#3826 ·
I maintainer di solito rispondono entro 3 giorni
-
comp: compat comp: firestore comp: storage type: chore
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
angular/angularfire#3822 ·
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di angular/angularfire
Issue simili
-
area: cli bug flake ready-for-agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
gazetta-studio/gazetta-studio#1772 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
microsoft/playwright#43875 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
documentation good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
calagopus/panel#285 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno