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 摘要。