firebase / firebase/firebase-admin-node

Realtime Database - reading data gives wrong value if transaction is pending

Offen
#2,634 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
api: database
Vorherrschende Sprache
TypeScript
Sterne
1.7k
Forks
419
Ø Merge
3 T. 10 Std.
Gemergte PRs (30 T.)
16

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der Node.js-Reproduktion unter Verwendung von admin.database().ref(...).transaction(...), gefolgt von parent ref.once('value', ...), und vergleiche das zurückgegebene Array mit und ohne die Transaktion. Lies das Verhalten von Realtime Database bei Transaktionen und Lesevorgängen, um das beabsichtigte Ergebnis zu bestimmen; abgeschlossen ist die Aufgabe, wenn der Fall einer ausstehenden Transaktion korrigiert oder wie vorgesehen ausdrücklich geklärt ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, node.js
Bereich
database
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.