在 Firebase v9 之前,我使用
.snapshotChanges()
返回带有 sapshot 数据的 Observable。所以我在 GUI 层中使用它来处理数据。
新的API不提供返回的Observables。相反,我必须使用回调来处理数据。
const ref = ref(db, 'path');
onValue(ref, (snapshot) => {
//handle data
});
混合数据库逻辑(自己的服务)和其他层(即组件/GUI)之间的代码。
有没有办法返回一个 Observable(就像旧 API 一样)?或者在我的数据库服务之外处理数据的最佳方法是什么?
您仍然可以这样做(按照您想要的方式保持关注点分离),如下所示:
在您的数据库 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();
};
});
}