Firebase 数据库 onValue 返回 Observable

问题描述 投票:0回答:1

在 Firebase v9 之前,我使用

.snapshotChanges()
返回带有 sapshot 数据的 Observable。所以我在 GUI 层中使用它来处理数据。

新的API不提供返回的Observables。相反,我必须使用回调来处理数据。

const ref = ref(db, 'path');
onValue(ref, (snapshot) => {
  //handle data
});

混合数据库逻辑(自己的服务)和其他层(即组件/GUI)之间的代码。

有没有办法返回一个 Observable(就像旧 API 一样)?或者在我的数据库服务之外处理数据的最佳方法是什么?

javascript firebase google-cloud-platform firebase-realtime-database angularfire
1个回答
0
投票

您仍然可以这样做(按照您想要的方式保持关注点分离),如下所示:

  • 在您的数据库 ng 服务中创建一个将返回 Observable 的方法:

  • 创建 dbRef(使用模块化 API,基本上是 rtdb = getDatabase();)

  • 知道 onValue 返回 Unsubscribe 函数等,你相应地映射你的 Observable:

    listenData(路径:字符串):可观察{

      return new Observable((observer) => {
        const dbRef = ref(this.rtdb, path);
    
        // Subscribe to Firebase path changes
        const unsubscribe = onValue(dbRef, (snapshot) => {
          observer.next(snapshot.val());
        }, (error) => {
          observer.error(error);
        });
    
        // Return cleanup function when unsubscribing
        return () => {
          unsubscribe();
          observer.complete();
        };
      });
    

    }

© www.soinside.com 2019 - 2024. All rights reserved.