114
return Promise.reject(new CancellationError());
115
}
117
>
const pageIndex = Math.floor(index / this.pager.pageSize);
118
>
const indexInPage = index % this.pager.pageSize;
119
>
const page = this.pages[pageIndex];
120
>
121
>
if (page.isResolved) {
122
return Promise.resolve(page.elements[indexInPage]);
123
}
125
>
if (!page.promise) {
126
>
page.cts = new CancellationTokenSource();
127
>
page.promise = this.pager.getPage(pageIndex, page.cts.token)
128
>
.then(elements => {
129
page.elements = elements;
130
page.isResolved = true;
131
page.promise = null;
132
page.cts = null;
134
page.isResolved = false;
135
page.promise = null;
136
page.cts = null;
137
return Promise.reject(err);
139
>
}
140
>
141
>
const listener = cancellationToken.onCancellationRequested(() => {
142
if (!page.cts) {
143
return;