mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-25 09:38:06 +02:00
Add support for async
/await
using Babel
For proof-of-concept, this patch converts a couple of `Promise` returning methods to use `async` instead. Please note that the `generic` build, based on this patch, has been successfully testing in IE11 (i.e. the viewer loads and nothing is obviously broken). Being able to use modern JavaScript features like `async`/`await` is a huge plus, but there's one (obvious) side-effect: The size of the built files will increase slightly (unless `SKIP_BABEL == true`). That's unavoidable, but seems like a small price to pay in the grand scheme of things. Finally, note that the `chromium` build target was changed to no longer skip Babel translation, since the Chrome extension still supports version `49` of the browser (where native `async` support isn't available).
This commit is contained in:
parent
4ea663aa8a
commit
099ed08852
13 changed files with 159 additions and 179 deletions
|
@ -1497,29 +1497,23 @@ var XRef = (function XRefClosure() {
|
|||
return xrefEntry;
|
||||
},
|
||||
|
||||
fetchIfRefAsync: function XRef_fetchIfRefAsync(obj, suppressEncryption) {
|
||||
async fetchIfRefAsync(obj, suppressEncryption) {
|
||||
if (!isRef(obj)) {
|
||||
return Promise.resolve(obj);
|
||||
return obj;
|
||||
}
|
||||
return this.fetchAsync(obj, suppressEncryption);
|
||||
},
|
||||
|
||||
fetchAsync: function XRef_fetchAsync(ref, suppressEncryption) {
|
||||
var streamManager = this.stream.manager;
|
||||
var xref = this;
|
||||
return new Promise(function tryFetch(resolve, reject) {
|
||||
try {
|
||||
resolve(xref.fetch(ref, suppressEncryption));
|
||||
} catch (e) {
|
||||
if (e instanceof MissingDataException) {
|
||||
streamManager.requestRange(e.begin, e.end).then(function () {
|
||||
tryFetch(resolve, reject);
|
||||
}, reject);
|
||||
return;
|
||||
}
|
||||
reject(e);
|
||||
async fetchAsync(ref, suppressEncryption) {
|
||||
try {
|
||||
return this.fetch(ref, suppressEncryption);
|
||||
} catch (ex) {
|
||||
if (!(ex instanceof MissingDataException)) {
|
||||
throw ex;
|
||||
}
|
||||
});
|
||||
await this.pdfManager.requestRange(ex.begin, ex.end);
|
||||
return this.fetchAsync(ref, suppressEncryption);
|
||||
}
|
||||
},
|
||||
|
||||
getCatalogObj: function XRef_getCatalogObj() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue