@@ -45,13 +45,13 @@ export type RatesParams = ReturnType<typeof asRatesParams>
4545type RateMap = Record < string , number | null >
4646
4747const rateMap : RateMap = { }
48- const resolverMap : Record <
48+ const resolverMap = new Map <
4949 string ,
5050 {
5151 resolvers : Function [ ]
5252 rateQueueEntry : RatesParams
5353 }
54- > = { }
54+ > ( )
5555let inQuery = false
5656
5757let numDoQuery = 0
@@ -62,7 +62,7 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
6262 const groupedParams = new Map < string , RatesParams > ( )
6363
6464 // Fill the query up to RATES_SERVER_MAX_QUERY_SIZE entries
65- const values = Object . values ( resolverMap )
65+ const values = resolverMap . values ( )
6666 for ( const value of values ) {
6767 const map = groupedParams . get ( value . rateQueueEntry . targetFiat )
6868 if ( map == null ) {
@@ -92,9 +92,10 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
9292 const cleanedRates = asRatesParams ( json )
9393
9494 // Since the requests are USD only, we'll match up the original requests to what we've received
95- for ( const [ key , { rateQueueEntry, resolvers } ] of Object . entries (
96- resolverMap
97- ) ) {
95+ for ( const [
96+ key ,
97+ { rateQueueEntry, resolvers }
98+ ] of resolverMap . entries ( ) ) {
9899 // Match crypto/fiat requests
99100 if ( rateQueueEntry . crypto . length === 1 ) {
100101 const cryptoToMatch = rateQueueEntry . crypto [ 0 ]
@@ -119,13 +120,13 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
119120 if ( crypto ?. rate != null && fiat ?. rate != null ) {
120121 const rate = crypto . rate / fiat . rate
121122 rateMap [ key ] = rate
122- if ( resolverMap [ key ] == null ) {
123+ if ( resolverMap . get ( key ) == null ) {
123124 clog ( `${ n } oops` )
124125 continue
125126 }
126127
127128 clog ( `${ n } deleting ${ key } ` )
128- delete resolverMap [ key ]
129+ resolverMap . delete ( key )
129130 if ( resolvers . length ) {
130131 resolvers . forEach ( ( r , i ) => {
131132 r ( rate )
@@ -155,13 +156,13 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
155156 if ( fromFiat ?. rate != null && toFiat ?. rate != null ) {
156157 const rate = fromFiat . rate / toFiat . rate
157158 rateMap [ key ] = rate
158- if ( resolverMap [ key ] == null ) {
159+ if ( resolverMap . get ( key ) == null ) {
159160 clog ( `${ n } oops` )
160161 continue
161162 }
162163
163164 clog ( `${ n } deleting ${ key } ` )
164- delete resolverMap [ key ]
165+ resolverMap . delete ( key )
165166 if ( resolvers . length ) {
166167 resolvers . forEach ( ( r , i ) => {
167168 r ( rate )
@@ -179,16 +180,17 @@ const doQuery = async (doFetch?: EdgeFetchFunction): Promise<void> => {
179180 console . warn ( `Error querying rates server ${ e . message } ` )
180181 }
181182 // Resolve all the promises with value 0
182- Object . entries ( resolverMap ) . forEach ( entry => {
183+ const resolversMapEntries = [ ...resolverMap . entries ( ) ]
184+ resolversMapEntries . forEach ( entry => {
183185 const [ pairDate , value ] = entry
184186 clog ( `${ n } throw deleting ${ pairDate } ` )
185- delete resolverMap [ pairDate ]
187+ resolverMap . delete ( pairDate )
186188 value . resolvers . forEach ( resolve => resolve ( 0 ) )
187189 } )
188190 }
189191 }
190192
191- if ( Object . keys ( resolverMap ) . length > 0 ) {
193+ if ( resolverMap . size > 0 ) {
192194 clog ( `${ n } Calling doQuery again` )
193195 await doQuery ( doFetch )
194196 } else {
@@ -204,16 +206,17 @@ const addToQueue = (
204206 maxQuerySize : number ,
205207 doFetch ?: EdgeFetchFunction
206208) => {
207- if ( resolverMap [ rateKey ] == null ) {
209+ const rateKeyResolver = resolverMap . get ( rateKey )
210+ if ( rateKeyResolver == null ) {
208211 // Create a new entry in the map for this pair/date
209212 clog ( `adding ${ rateKey } ` )
210- resolverMap [ rateKey ] = {
213+ resolverMap . set ( rateKey , {
211214 resolvers : [ resolve ] ,
212215 rateQueueEntry : entry
213- }
216+ } )
214217 } else {
215218 // Add a resolver to existing pair/date entry
216- resolverMap [ rateKey ] . resolvers . push ( resolve )
219+ rateKeyResolver . resolvers . push ( resolve )
217220 return
218221 }
219222 if ( ! inQuery ) {
0 commit comments