Skip to content

Commit 9f25ab6

Browse files
author
Brian Chen
authored
Adding call to clearPersistence() into AsyncQueue (#1740)
1 parent 20a4430 commit 9f25ab6

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

packages/firestore/src/api/database.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import { LogLevel } from '../util/log';
7979
import { AutoId } from '../util/misc';
8080
import * as objUtils from '../util/obj';
8181
import { Rejecter, Resolver } from '../util/promise';
82+
import { Deferred } from './../util/promise';
8283
import { FieldPath as ExternalFieldPath } from './field_path';
8384

8485
import {
@@ -436,7 +437,16 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
436437
const persistenceKey = IndexedDbPersistence.buildStoragePrefix(
437438
this.makeDatabaseInfo()
438439
);
439-
return IndexedDbPersistence.clearPersistence(persistenceKey);
440+
const deferred = new Deferred<void>();
441+
this._queue.enqueueAndForget(async () => {
442+
try {
443+
await IndexedDbPersistence.clearPersistence(persistenceKey);
444+
deferred.resolve();
445+
} catch (e) {
446+
deferred.reject(e);
447+
}
448+
});
449+
return deferred.promise;
440450
}
441451

442452
ensureClientConfigured(): FirestoreClient {

packages/firestore/test/integration/api/database.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import * as chaiAsPromised from 'chai-as-promised';
2121
import * as firestore from '@firebase/firestore-types';
2222
import { expect } from 'chai';
2323

24+
import { SimpleDb } from '../../../src/local/simple_db';
2425
import { fail } from '../../../src/util/assert';
2526
import { Code } from '../../../src/util/error';
2627
import { query } from '../../util/api_helpers';
@@ -971,6 +972,27 @@ apiDescribe('Database', persistence => {
971972
}
972973
);
973974

975+
(persistence ? it : it.skip)(
976+
'will reject the promise if clear persistence fails',
977+
async () => {
978+
await withTestDoc(persistence, async docRef => {
979+
const oldDelete = SimpleDb.delete;
980+
try {
981+
SimpleDb.delete = (name: string): Promise<void> => {
982+
return Promise.reject('Failed to delete the database.');
983+
};
984+
const firestore = docRef.firestore;
985+
await firestore.app.delete();
986+
await expect(
987+
clearPersistence(firestore)
988+
).to.eventually.be.rejectedWith('Failed to delete the database.');
989+
} finally {
990+
SimpleDb.delete = oldDelete;
991+
}
992+
});
993+
}
994+
);
995+
974996
it('can not clear persistence if the client has been initialized', async () => {
975997
await withTestDoc(persistence, async docRef => {
976998
const firestore = docRef.firestore;

0 commit comments

Comments
 (0)