|
@@ -111,28 +111,31 @@ func (p *pager[T]) iteratePages() <-chan Page[T] {
|
|
if p.ctx.Err() != nil {
|
|
if p.ctx.Err() != nil {
|
|
break
|
|
break
|
|
}
|
|
}
|
|
- page = <-p.pagePool
|
|
|
|
- err := p.client.NextPage(page, p.m*p.n)
|
|
|
|
- if err != nil {
|
|
|
|
- p.err = err
|
|
|
|
- p.pagePool <- page
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- if p.cnt == 0 {
|
|
|
|
- p.cnt = page.Count()
|
|
|
|
- }
|
|
|
|
- // When page.Count() is zero, we must rely on the
|
|
|
|
- // absence of returned results to know when to stop.
|
|
|
|
- if p.cnt == 0 && len(page.Elems()) == 0 {
|
|
|
|
- p.pagePool <- page
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- ch <- page
|
|
|
|
|
|
+ select {
|
|
|
|
+ case page = <-p.pagePool:
|
|
|
|
+ err := p.client.NextPage(page, p.m*p.n)
|
|
|
|
+ if err != nil {
|
|
|
|
+ p.err = err
|
|
|
|
+ p.pagePool <- page
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if p.cnt == 0 {
|
|
|
|
+ p.cnt = page.Count()
|
|
|
|
+ }
|
|
|
|
+ // When page.Count() is zero, we must rely on the
|
|
|
|
+ // absence of returned results to know when to stop.
|
|
|
|
+ if p.cnt == 0 && len(page.Elems()) == 0 {
|
|
|
|
+ p.pagePool <- page
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ ch <- page
|
|
|
|
|
|
- if (p.m*p.n + p.n) >= p.cnt {
|
|
|
|
- return
|
|
|
|
|
|
+ if p.cnt != 0 && (p.m*p.n+p.n) >= p.cnt {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ p.m++
|
|
|
|
+ default:
|
|
}
|
|
}
|
|
- p.m++
|
|
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
return ch
|
|
return ch
|