diff --git a/web/base_viewer.js b/web/base_viewer.js index 6b90f12bf..2f7923844 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -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; } diff --git a/web/pdf_thumbnail_viewer.js b/web/pdf_thumbnail_viewer.js index 1fdd89cab..982abfd68 100644 --- a/web/pdf_thumbnail_viewer.js +++ b/web/pdf_thumbnail_viewer.js @@ -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; }