【问题标题】:Firebase Firestore: globally detect when there are pending writesFirebase Firestore:全局检测何时有待处理的写入
【发布时间】:2022-11-30 02:12:05
【问题描述】:
我有一个简单的要求,如果用户离开浏览器窗口,而在使用 beforeunload 侦听器在 Firestore 中发生未决写入时,我会向用户显示警告:
window.addEventListener('beforeunload', e => {
if (NO_PENDING_SAVES) return;
e.preventDefault();
e.returnValue =
'Your changes are still being saved. Are you sure you want to leave?';
}, {
capture: true,
});
在使用 Web SDK 的 Firestore 中,如何检测全局是否有待处理的保存? Firestore 对象上有一个 waitForPendingWrites() 方法,但它需要轮询并且它也是异步的,因此它不会在 beforeunload 内部工作。
【问题讨论】:
标签:
javascript
firebase
google-cloud-firestore
onbeforeunload
【解决方案1】:
解决了这样做(异步方式):
export class FirebaseService {
constructor(private db: AngularFirestore) {
}
pendingWrites(): Observable<any> {
return defer(() => this.db.firestore.waitForPendingWrites())
}
接着:
export class PendingWritesService {
hasPendingWrites$: Observable<boolean>;
constructor(
private firebaseService: FirebaseService
){
this.hasPendingWrites$ = this.somethingPending$();
}
somethingPending$(): Observable<boolean> {
const timeEmmiter = timer(1000);
return race(timeEmmiter, this.firebaseService.pendingWrites()).pipe(
switchMap((pendingWrites, noPendingWrites) => {
const arePendingsWrites = 0;
return of(pendingWrites === arePendingsWrites);
})
)
}
}