firebase / firebase/firebase-admin-node
Realtime Database - reading data gives wrong value if transaction is pending
- Langage dominant
- TypeScript
- Étoiles
- 1.7k
- Forks
- 419
- Merge moyen
- 3 j 10 h
- PR mergées (30 j)
- 16
Description
### [REQUIRED] Step 2: Describe your environment
* Operating System version: macOS 14.5 (23F79)
* Firebase SDK version: 12.2.0
* Firebase Product: database
* Node.js version: v20.13.0
* NPM version: v10.5.2
### [REQUIRED] Step 3: Describe the problem
If a transaction is pending for a node, it doesn't show up when reading data for the parent node with `.once("value", ...)`. I'm not sure if this is a bug or intended behavior.
#### Steps to reproduce:
For these examples, our database looks like this:
```json
{
"example_list": [
"a",
"b",
"c"
]
}
```
This code works as expected:
```js
let ref = admin.database().ref("example_list");
ref.once('value', (snap) => {
console.log(snap.val())
});
```
Logs: `[ 'a', 'b', 'c' ]`
This code does NOT work as expected:
```js
admin.database().ref("example_list/1").transaction((currentData) => {
return currentData;
});
let ref = admin.database().ref("example_list");
ref.once('value', (snap) => {
console.log(snap.val())
});
```
Logs: `[ 'a', <1 empty item>, 'c' ]`
Adding a transaction first, which seems like a no-op, actually causes the read to return a different result.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par la reproduction Node.js utilisant admin.database().ref(...).transaction(...), suivie de parent ref.once('value', ...), et comparez le tableau renvoyé avec et sans la transaction. Consultez le comportement des transactions et des lectures de Realtime Database afin de déterminer le résultat attendu ; la tâche est terminée lorsque le cas de la transaction en attente est corrigé ou explicitement résolu comme prévu.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, node.js
- Domaine
- database
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100