angular Firestore:Observable.toPromise() 对比 Observalble.firstValueFrom();
angular Firestore: Observable.toPromise() versus Observalble.firstValueFrom();
我在 Angular 项目 (13.0.3) 中使用 Observables 与 AngularFireStore 数据库 (angular/fire 7.2)
我需要一种简单的方法来仅从 firestore 集合中检索一些数据,然后 return 将其用于服务。我不需要 observable,只需要数据库中的当前值。
所以我编写了以下简单的实用程序方法来获取文档并 return 它。:
async readDocument(collectionPath : string, key : string) : Promise<any> {
let path = `${collectionPath}/${key}`
let doc = await this.firestore.doc(path).get().toPromise()
return doc.data();
}
这实际上工作得很好并且做了我想要的,除了 observable.toPromise()
显示为 strike -hrough 并且显然已 depcreated 并将在 rxjs 的 V8 中删除。
代码完整中出现一条消息,建议使用方法 firstValueFrom()
或 'lastValueFrom()
而不是 .toPromise(),这是有道理的,考虑到 '.get() 可能 return 一组对象而不是单个对象。
问题是即使警告提示了它,Observable.lastValueFrom() 实际上并不作为 Observable 上的方法存在。试图弄清楚为什么会这样,以及我可以做些什么来避免使用 rxjs Observable 的弃用方法?我真的更愿意保持简单,而不必订阅和使用管道以及所有这些只是为了从数据库中获取单个值。
它不是一个方法,而是一个效用函数,你应该这样称呼它
import { firstValueFrom } from 'rxjs';
//...
const doc = await firstValueFrom(this.firestore.doc(path).get());
我在 Angular 项目 (13.0.3) 中使用 Observables 与 AngularFireStore 数据库 (angular/fire 7.2)
我需要一种简单的方法来仅从 firestore 集合中检索一些数据,然后 return 将其用于服务。我不需要 observable,只需要数据库中的当前值。
所以我编写了以下简单的实用程序方法来获取文档并 return 它。:
async readDocument(collectionPath : string, key : string) : Promise<any> {
let path = `${collectionPath}/${key}`
let doc = await this.firestore.doc(path).get().toPromise()
return doc.data();
}
这实际上工作得很好并且做了我想要的,除了 observable.toPromise()
显示为 strike -hrough 并且显然已 depcreated 并将在 rxjs 的 V8 中删除。
代码完整中出现一条消息,建议使用方法 firstValueFrom()
或 'lastValueFrom()
而不是 .toPromise(),这是有道理的,考虑到 '.get() 可能 return 一组对象而不是单个对象。
问题是即使警告提示了它,Observable.lastValueFrom() 实际上并不作为 Observable 上的方法存在。试图弄清楚为什么会这样,以及我可以做些什么来避免使用 rxjs Observable 的弃用方法?我真的更愿意保持简单,而不必订阅和使用管道以及所有这些只是为了从数据库中获取单个值。
它不是一个方法,而是一个效用函数,你应该这样称呼它
import { firstValueFrom } from 'rxjs';
//...
const doc = await firstValueFrom(this.firestore.doc(path).get());