angular - 从 Cloud Firestore 读取数据时,我是否需要使用带有 .valueChanges() 的订阅?
问题描述
以前使用实时数据库我已经习惯使用订阅来监视数据库中的更改。然而,Cloud Firestore 的 .valueChanges() 似乎会自动执行此操作,所以我还需要使用 rxjs 订阅吗?
我的代码在下面完全正常工作,没有我要问的问题,_subscription: Subscription;
而不是.valueChanges().subscribe
import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from '@angular/fire/firestore';
import * as firebase from 'firebase/app';
import 'firebase/database';
import 'rxjs/Rx';
import { Observable, pipe, of, Subscription } from 'rxjs';
import { switchMap } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class FirebaseService {
_data: any = [];
_subscription: Subscription;
itemsDocument_data: AngularFirestoreDocument<any[]>;
itemsCollection_data: AngularFirestoreCollection<any[]>;
constructor(private _afDB: AngularFirestore) {
await _dbGeData();
}
private async _dbGeData() {
try {
if (this._fbData_subscription_User === undefined) {
this.itemsDocument_users = this._afDB.collection("_myDataPath").doc("_mySecondDatapath");
this._subscription_data = await this.itemsDocument_data.valueChanges().subscribe((items) => {
this._data = [];
for (let i in items) {
this._data.push = items[i];
}
//items (object) is now this._data (Array)
console.log("items (object)", items);
console.log("this._data (Array)", this._data);
return;
});
}
} catch (e) {
console.error("when getting data", e);
return;
}
return;
}
ngOnDestroy() {
if (this._subscription !== undefined) {
this._subscription.unsubscribe();
}
}
}
解决方案
valueChanges()
返回一个可观察的,您必须以一种或另一种方式订阅它才能真正发生任何事情。
你不能留在这个可观察的范围内并在最后一刻订阅(就像在模板中一样AyncPipe
)?
推荐阅读
- node.js - Heroku Dyno Nodejs App Date.now() 在服务器时间正确时给出卡住时间
- javascript - 使用屏幕分辨率的带有 Javascript 的 iframe
- asp.net - 无法将角色分配给用户
- c++ - mex 编译错误 C2440:“正在初始化”:无法从“const mwSize *”转换为“const int32_t *”
- reactjs - 如何在 asp.net 核心之上的 Reactjs 中设置路由
- javascript - 具有来自表 Javascript 的动态属性的对象
- javascript - 如何插入允许用户在开头选择秒的功能?
- java - 毕加索抛出异常:context == null
- button - 在同一行JavaFX中单击按钮从tableview中获取行
- rest - . 简单的 1 键 REST API 有什么风险?