angular / angular/angularfire

Realtime Database doesn't receive live updates if ref has no children

未關閉
#3,254 10 則留言 4 個 reaction 已指派 0 人 在 GitHub 檢視
comp: database triaged: keep-open type: bug version: legacy (v7-v16)
主要語言
TypeScript
星號
7.8k
分支
2.2k
平均合併
22 小時 28 分鐘
30 天內合併 PR
6

描述

Hello all!
There is an issue when I use the `listVal()` function with the ref that currently has no children. It will return an empty array on subscription, but later, after adding children, it will not emit updates.

The real-time update works as expected when you call the same code with existing children.

### Version info

**Angular:**
13.3.2
**Firebase:**
9.9.2
**AngularFire:**
7.4.1
**Other (e.g. Ionic/Cordova, Node, browser, operating system):**
Node v16.13.0, Mac OS Monterey
### How to reproduce these conditions

```
// Call it when stories has no children
listVal(ref(this.db, 'stories'), { keyField: 'key' })
.subscribe((stories) => {
console.log('Stories', stories); // Will be called once with []
});

push(ref(this.db, 'stories'), {name: 'test'});

// console.log('Stories', stories); will not be called
```

### Debug output

** Errors in the JavaScript console **
No errors

** Output from `firebase.database().enableLogging(true);` **
```
[2022-08-08T13:45:12.328Z] @firebase/database: 0: set {"path":"/stories/-N8xgwy0SpF6eryoEif3","value":{"name":"Test","startDate":"2022-08-08T13:45:12.328Z"},"priority":null}

[2022-08-08T13:45:12.329Z] @firebase/database: p:0: {"r":20,"a":"p","b":{"p":"/stories/-N8xgwy0SpF6eryoEif3","d":{"name":"Test","startDate":"2022-08-08T13:45:12.328Z"}}}

[2022-08-08T13:45:12.491Z] @firebase/database: p:0: from server: {"r":20,"b":{"s":"ok","d":""}}

[2022-08-08T13:45:12.492Z] @firebase/database: p:0: p response {"s":"ok","d":""}
```

### Expected behavior

You can subscribe to the empty parent and receive update when first child is added. It works correctly with `objectVal()` and AngularList from the compat version.

### Actual behavior

It doesn't emit updates if you subscribed to the empty parent.

Looks like the issue is with list function in database, that returns Observable of empty array.
![image](https://user-images.githubusercontent.com/3729354/183435506-c6ee0f86-7482-436a-908a-0c67933b48ff.png)

貢獻指南

開啟貢獻指南

研究方向

Start from the listVal(ref(this.db, 'stories'), { keyField: 'key' }) subscription and compare its behavior with objectVal() and the compat AngularList implementation. Reproduce the empty-parent case, then verify that adding a child with push(ref(this.db, 'stories'), ...) causes the subscription to emit an updated list.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
angular, firebase, typescript
領域
database
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
冷清
描述清晰度
基本清楚
新手友好度
55/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。