@@ -146,8 +146,9 @@ class V1SearchIterator<T> extends V1Iterator<T> {
146146}
147147
148148class V2ListIterator < T > implements AsyncIterator < T > {
149- private currentPageIterator : Promise < Iterator < T > > ;
150- private nextPageUrl : Promise < string | null > ;
149+ private firstPagePromise : Promise < PageResult < T > > | null ;
150+ private currentPageIterator : Iterator < T > | null ;
151+ private nextPageUrl : string | null ;
151152 private requestArgs : RequestArgs ;
152153 private spec : MethodSpec ;
153154 private stripeResource : StripeResourceObject ;
@@ -157,32 +158,33 @@ class V2ListIterator<T> implements AsyncIterator<T> {
157158 spec : MethodSpec ,
158159 stripeResource : StripeResourceObject
159160 ) {
160- this . currentPageIterator = ( async ( ) : Promise < Iterator < T > > => {
161- const page = await firstPagePromise ;
162- return page . data [ Symbol . iterator ] ( ) ;
163- } ) ( ) ;
164-
165- this . nextPageUrl = ( async ( ) : Promise < string | null > => {
166- const page = await firstPagePromise ;
167- return page . next_page_url || null ;
168- } ) ( ) ;
169-
161+ this . firstPagePromise = firstPagePromise ;
162+ this . currentPageIterator = null ;
163+ this . nextPageUrl = null ;
170164 this . requestArgs = requestArgs ;
171165 this . spec = spec ;
172166 this . stripeResource = stripeResource ;
173167 }
168+ private async initFirstPage ( ) : Promise < void > {
169+ if ( this . firstPagePromise ) {
170+ const page = await this . firstPagePromise ;
171+ this . firstPagePromise = null ;
172+ this . currentPageIterator = page . data [ Symbol . iterator ] ( ) ;
173+ this . nextPageUrl = page . next_page_url || null ;
174+ }
175+ }
174176 private async turnPage ( ) : Promise < Iterator < T > | null > {
175- const nextPageUrl = await this . nextPageUrl ;
176- if ( ! nextPageUrl ) return null ;
177- this . spec . fullPath = nextPageUrl ;
177+ if ( ! this . nextPageUrl ) return null ;
178+ this . spec . fullPath = this . nextPageUrl ;
178179 const page = await this . stripeResource . _makeRequest ( [ ] , this . spec , { } ) ;
179- this . nextPageUrl = Promise . resolve ( page . next_page_url ) ;
180- this . currentPageIterator = Promise . resolve ( page . data [ Symbol . iterator ] ( ) ) ;
180+ this . nextPageUrl = page . next_page_url || null ;
181+ this . currentPageIterator = page . data [ Symbol . iterator ] ( ) ;
181182 return this . currentPageIterator ;
182183 }
183184 async next ( ) : Promise < IteratorResult < T > > {
184- {
185- const result = ( await this . currentPageIterator ) . next ( ) ;
185+ await this . initFirstPage ( ) ;
186+ if ( this . currentPageIterator ) {
187+ const result = this . currentPageIterator . next ( ) ;
186188 if ( ! result . done ) return { done : false , value : result . value } ;
187189 }
188190 const nextPageIterator = await this . turnPage ( ) ;
0 commit comments