📜  o 列出 AngularFireDatabase não é mais um observable?? - Javascript(1)

📅  最后修改于: 2023-12-03 15:18:04.958000             🧑  作者: Mango

AngularFireDatabase 不再是一个 Observable

3.0 版本开始,AngularFireDatabaseAngularFire 库中进行了重构,并且不再是一个 Observable 。这个修改是为了更好地与 Angular 框架集成,提供更好的可维护性和性能。

为什么不再使用 Observable?

2.0 版本中,AngularFireDatabase 作为一个 Observable 对象存在,这意味着我们可以通过订阅来获取数据库中的实时更新。然而,这种设计存在一些缺点:

  1. 隐式订阅:每当我们访问数据库时,都会创建一个新的流,并立即开始订阅。虽然这种方式非常方便,但在复杂的组件层次结构中,容易导致性能问题和内存泄漏。

  2. 难以维护:将数据库访问和 UI 逻辑混合在一起的方式,使得代码难以管理和测试。这种设计模式也不符合单一职责原则。

为了解决以上问题,开发团队决定将 AngularFireDatabase 重构为一个更简洁的 API。

AngularFireDatabase 新的 API

新的 AngularFireDatabase API 建立在 AngularHttpClient 上,并通过 Promise 返回数据。这样使得代码更易于编写、测试和维护。

示例代码如下所示:

import { AngularFireDatabase } from 'angularfire2/database';
import { AngularFireObject } from 'angularfire2/database';

...

constructor(private db: AngularFireDatabase) { }

getData(): Promise<any> {
  return this.db.object('path/to/data').valueChanges().toPromise();
}

setData(data: any): Promise<void> {
  return this.db.object('path/to/data').update(data);
}

在新的 API 中,我们使用 valueChanges() 方法获取对数据库的引用,并使用 toPromise() 方法将其转化为一个 Promise

总结

AngularFireDatabase 不再是一个 Observable 对象,而是使用更简洁的 API 获得对数据库的引用。这个更改带来了更好的性能,更易于维护的代码,并更好地集成到 Angular 框架中。