【问题标题】: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);
       })
      )
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2023-01-04
      • 2018-08-03
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多