Merge pull request #11350 from Snuffleupagus/_pagesRequests-WeakMap

Convert `{BaseViewer, PDFThumbnailViewer}._pagesRequests` from an Array to a WeakMap
This commit is contained in:
Tim van der Meij 2019-11-21 23:41:54 +01:00 committed by GitHub
commit 96c595411a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 18 deletions

View File

@ -533,7 +533,7 @@ class BaseViewer {
this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
this._location = null;
this._pagesRotation = 0;
this._pagesRequests = [];
this._pagesRequests = new WeakMap();
this._pageViewsReady = false;
this._scrollMode = ScrollMode.VERTICAL;
this._spreadMode = SpreadMode.NONE;
@ -961,22 +961,21 @@ class BaseViewer {
if (pageView.pdfPage) {
return Promise.resolve(pageView.pdfPage);
}
let pageNumber = pageView.id;
if (this._pagesRequests[pageNumber]) {
return this._pagesRequests[pageNumber];
if (this._pagesRequests.has(pageView)) {
return this._pagesRequests.get(pageView);
}
let promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {
const promise = this.pdfDocument.getPage(pageView.id).then((pdfPage) => {
if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage);
}
this._pagesRequests[pageNumber] = null;
this._pagesRequests.delete(pageView);
return pdfPage;
}).catch((reason) => {
console.error('Unable to get page for page view', reason);
// Page error -- there is nothing can be done.
this._pagesRequests[pageNumber] = null;
// Page error -- there is nothing that can be done.
this._pagesRequests.delete(pageView);
});
this._pagesRequests[pageNumber] = promise;
this._pagesRequests.set(pageView, promise);
return promise;
}

View File

@ -147,7 +147,7 @@ class PDFThumbnailViewer {
this._currentPageNumber = 1;
this._pageLabels = null;
this._pagesRotation = 0;
this._pagesRequests = [];
this._pagesRequests = new WeakMap();
// Remove the thumbnails from the DOM.
this.container.textContent = '';
@ -231,20 +231,19 @@ class PDFThumbnailViewer {
if (thumbView.pdfPage) {
return Promise.resolve(thumbView.pdfPage);
}
let pageNumber = thumbView.id;
if (this._pagesRequests[pageNumber]) {
return this._pagesRequests[pageNumber];
if (this._pagesRequests.has(thumbView)) {
return this._pagesRequests.get(thumbView);
}
let promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {
const promise = this.pdfDocument.getPage(thumbView.id).then((pdfPage) => {
thumbView.setPdfPage(pdfPage);
this._pagesRequests[pageNumber] = null;
this._pagesRequests.delete(thumbView);
return pdfPage;
}).catch((reason) => {
console.error('Unable to get page for thumb view', reason);
// Page error -- there is nothing can be done.
this._pagesRequests[pageNumber] = null;
// Page error -- there is nothing that can be done.
this._pagesRequests.delete(thumbView);
});
this._pagesRequests[pageNumber] = promise;
this._pagesRequests.set(thumbView, promise);
return promise;
}