@@ -34,8 +34,8 @@ import {
34
34
terminateDatastore
35
35
} from '../../../src/remote/datastore' ;
36
36
import { PlatformSupport } from '../../../src/platform/platform' ;
37
- import { Deferred } from '../../../src/util/promise' ;
38
37
import { cast } from './util' ;
38
+ import { Settings } from '../../' ;
39
39
40
40
// settings() defaults:
41
41
const DEFAULT_HOST = 'firestore.googleapis.com' ;
@@ -52,8 +52,8 @@ export class Firestore implements firestore.FirebaseFirestore {
52
52
private readonly _credentials : CredentialsProvider ;
53
53
54
54
// Assigned via _configureClient()/_ensureClientConfigured()
55
- _settings ?: firestore . Settings ;
56
- private readonly _datastoreDeferred = new Deferred < Datastore > ( ) ;
55
+ private _settings ?: firestore . Settings ;
56
+ private _datastorePromise ?: Promise < Datastore > ;
57
57
58
58
constructor (
59
59
app : FirebaseApp ,
@@ -78,31 +78,29 @@ export class Firestore implements firestore.FirebaseFirestore {
78
78
) ;
79
79
}
80
80
this . _settings = settings ;
81
-
82
- const databaseInfo = this . _makeDatabaseInfo ( settings ) ;
83
-
84
- // Kick off initializing the datastore but don't actually wait for it.
85
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
86
- PlatformSupport . getPlatform ( )
87
- . loadConnection ( databaseInfo )
88
- . then ( connection => {
89
- const serializer = PlatformSupport . getPlatform ( ) . newSerializer (
90
- databaseInfo . databaseId
91
- ) ;
92
- const datastore = newDatastore (
93
- connection ,
94
- this . _credentials ,
95
- serializer
96
- ) ;
97
- this . _datastoreDeferred . resolve ( datastore ) ;
98
- } ) ;
99
81
}
100
82
101
- _ensureClientConfigured ( ) : Promise < Datastore > {
83
+ _getSettings ( ) : Settings {
102
84
if ( ! this . _settings ) {
103
85
this . _settings = { } ;
104
86
}
105
- return this . _datastoreDeferred . promise ;
87
+ return this . _settings ;
88
+ }
89
+
90
+ _getDatastore ( ) : Promise < Datastore > {
91
+ if ( ! this . _datastorePromise ) {
92
+ const databaseInfo = this . _makeDatabaseInfo ( this . _getSettings ( ) ) ;
93
+ this . _datastorePromise = PlatformSupport . getPlatform ( )
94
+ . loadConnection ( databaseInfo )
95
+ . then ( connection => {
96
+ const serializer = PlatformSupport . getPlatform ( ) . newSerializer (
97
+ databaseInfo . databaseId
98
+ ) ;
99
+ return newDatastore ( connection , this . _credentials , serializer ) ;
100
+ } ) ;
101
+ }
102
+
103
+ return this . _datastorePromise ;
106
104
}
107
105
108
106
private _makeDatabaseInfo ( settings : firestore . Settings ) : DatabaseInfo {
@@ -149,6 +147,6 @@ export function terminate(
149
147
// TODO(firestorelite): Call _removeServiceInstance when available
150
148
const firestoreClient = cast ( firestore , Firestore ) ;
151
149
return firestoreClient
152
- . _ensureClientConfigured ( )
150
+ . _getDatastore ( )
153
151
. then ( datastore => terminateDatastore ( datastore ) ) ;
154
152
}
0 commit comments