From 944e3fceff99ba291478b15891650550b4f0dc88 Mon Sep 17 00:00:00 2001 From: dfahlander Date: Sat, 4 May 2024 00:46:16 +0200 Subject: [PATCH] Rewrite deprecated .toPromise() --- addons/dexie-cloud/src/dexie-cloud-client.ts | 46 +++++++++---------- .../dexie-cloud/src/sync/connectWebSocket.ts | 4 +- .../src/sync/messagesFromServerQueue.ts | 11 ++--- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/addons/dexie-cloud/src/dexie-cloud-client.ts b/addons/dexie-cloud/src/dexie-cloud-client.ts index 777a30276..1c75f4612 100644 --- a/addons/dexie-cloud/src/dexie-cloud-client.ts +++ b/addons/dexie-cloud/src/dexie-cloud-client.ts @@ -4,7 +4,7 @@ import { DBRealmMember, getDbNameFromDbUrl, } from 'dexie-cloud-common'; -import { BehaviorSubject, combineLatest, from, fromEvent, Subject } from 'rxjs'; +import { BehaviorSubject, combineLatest, firstValueFrom, from, fromEvent, Subject } from 'rxjs'; import { filter, map, skip, startWith, switchMap, take } from 'rxjs/operators'; import { login } from './authentication/login'; import { UNAUTHORIZED_USER } from './authentication/UNAUTHORIZED_USER'; @@ -174,16 +174,15 @@ export function dexieCloud(dexie: Dexie) { const syncState = db.cloud.persistedSyncState.value; triggerSync(db, purpose); if (wait) { - const newSyncState = await db.cloud.persistedSyncState - .pipe( + const newSyncState = await firstValueFrom( + db.cloud.persistedSyncState.pipe( filter( (newSyncState) => newSyncState?.timestamp != null && (!syncState || newSyncState.timestamp > syncState.timestamp!) - ), - take(1) + ) ) - .toPromise(); + ); if (newSyncState?.error) { throw new Error(`Sync error: ` + newSyncState.error); } @@ -193,23 +192,20 @@ export function dexieCloud(dexie: Dexie) { triggerSync(db, purpose); if (wait) { console.debug('db.cloud.login() is waiting for sync completion...'); - await from( - liveQuery(async () => { - const syncNeeded = await isSyncNeeded(db); - const newSyncState = await db.getPersistedSyncState(); - if ( - newSyncState?.timestamp !== syncState?.timestamp && - newSyncState?.error - ) - throw new Error(`Sync error: ` + newSyncState.error); - return syncNeeded; - }) - ) - .pipe( - filter((isNeeded) => !isNeeded), - take(1) - ) - .toPromise(); + await firstValueFrom( + from( + liveQuery(async () => { + const syncNeeded = await isSyncNeeded(db); + const newSyncState = await db.getPersistedSyncState(); + if ( + newSyncState?.timestamp !== syncState?.timestamp && + newSyncState?.error + ) + throw new Error(`Sync error: ` + newSyncState.error); + return syncNeeded; + }) + ).pipe(filter((isNeeded) => !isNeeded)) + ); console.debug( 'Done waiting for sync completion because we have nothing to push anymore' ); @@ -393,10 +389,10 @@ export function dexieCloud(dexie: Dexie) { // with things from the database and not just the default values. // This is so that when db.open() completes, user should be safe // to subscribe to these observables and get actual data. - await combineLatest([ + await firstValueFrom(combineLatest([ currentUserEmitter.pipe(skip(1), take(1)), db.cloud.persistedSyncState.pipe(skip(1), take(1)), - ]).toPromise(); + ])); } // HERE: If requireAuth, do athentication now. diff --git a/addons/dexie-cloud/src/sync/connectWebSocket.ts b/addons/dexie-cloud/src/sync/connectWebSocket.ts index 7a2a4dd0c..7a705bfcb 100644 --- a/addons/dexie-cloud/src/sync/connectWebSocket.ts +++ b/addons/dexie-cloud/src/sync/connectWebSocket.ts @@ -1,4 +1,4 @@ -import { BehaviorSubject, from, Observable, of, throwError } from 'rxjs'; +import { BehaviorSubject, firstValueFrom, from, Observable, of, throwError } from 'rxjs'; import { catchError, debounceTime, @@ -39,7 +39,7 @@ async function waitAndReconnectWhenUserDoesSomething(error: Error) { await sleep(3000); // Wait til user does something (move mouse, tap, scroll, click etc) console.debug('waiting for someone to do something'); - await userDoesSomething.pipe(take(1)).toPromise(); + await firstValueFrom(userDoesSomething); console.debug('someone did something!'); } diff --git a/addons/dexie-cloud/src/sync/messagesFromServerQueue.ts b/addons/dexie-cloud/src/sync/messagesFromServerQueue.ts index 8071acac0..d95ea5903 100644 --- a/addons/dexie-cloud/src/sync/messagesFromServerQueue.ts +++ b/addons/dexie-cloud/src/sync/messagesFromServerQueue.ts @@ -1,4 +1,4 @@ -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, firstValueFrom } from 'rxjs'; import { filter, take } from 'rxjs/operators'; import { DexieCloudDB } from '../db/DexieCloudDB'; import { WSConnectionMsg } from '../WSObservable'; @@ -73,12 +73,11 @@ export function MessagesFromServerConsumer(db: DexieCloudDB) { // If the sync worker or service worker is syncing, wait 'til thei're done. // It's no need to have two channels at the same time - even though it wouldnt // be a problem - this is an optimization. - await db.cloud.syncState - .pipe( - filter(({ phase }) => phase === 'in-sync' || phase === 'error'), - take(1) + await firstValueFrom( + db.cloud.syncState.pipe( + filter(({ phase }) => phase === 'in-sync' || phase === 'error') ) - .toPromise(); + ); console.debug('processing msg', msg); const persistedSyncState = db.cloud.persistedSyncState.value; //syncState.