Propagate promise rejections so we show the fallback.
-Adds rejection support to Promise.All. -Makes promise.then() callback optional.
This commit is contained in:
parent
bf2ebd3714
commit
3dadde52dc
15
src/core.js
15
src/core.js
@ -156,6 +156,10 @@ var Page = (function PageClosure() {
|
|||||||
var self = this;
|
var self = this;
|
||||||
var promise = new Promise();
|
var promise = new Promise();
|
||||||
|
|
||||||
|
function reject(e) {
|
||||||
|
promise.reject(e);
|
||||||
|
}
|
||||||
|
|
||||||
var pageListPromise = new Promise();
|
var pageListPromise = new Promise();
|
||||||
var annotationListPromise = new Promise();
|
var annotationListPromise = new Promise();
|
||||||
|
|
||||||
@ -170,7 +174,7 @@ var Page = (function PageClosure() {
|
|||||||
this.idCounters);
|
this.idCounters);
|
||||||
|
|
||||||
var dataPromises = Promise.all(
|
var dataPromises = Promise.all(
|
||||||
[contentStreamPromise, resourcesPromise]);
|
[contentStreamPromise, resourcesPromise], reject);
|
||||||
dataPromises.then(function(data) {
|
dataPromises.then(function(data) {
|
||||||
var contentStream = data[0];
|
var contentStream = data[0];
|
||||||
var resources = data[1];
|
var resources = data[1];
|
||||||
@ -181,7 +185,8 @@ var Page = (function PageClosure() {
|
|||||||
opListPromise.then(function(data) {
|
opListPromise.then(function(data) {
|
||||||
pageListPromise.resolve(data);
|
pageListPromise.resolve(data);
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
reject
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -195,7 +200,8 @@ var Page = (function PageClosure() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
|
reject
|
||||||
);
|
);
|
||||||
|
|
||||||
Promise.all([pageListPromise, annotationListPromise]).then(
|
Promise.all([pageListPromise, annotationListPromise]).then(
|
||||||
@ -211,7 +217,8 @@ var Page = (function PageClosure() {
|
|||||||
Util.extendObj(pageData.dependencies, annotationData.dependencies);
|
Util.extendObj(pageData.dependencies, annotationData.dependencies);
|
||||||
|
|
||||||
promise.resolve(pageData);
|
promise.resolve(pageData);
|
||||||
}
|
},
|
||||||
|
reject
|
||||||
);
|
);
|
||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
|
23
src/util.js
23
src/util.js
@ -672,16 +672,26 @@ var Promise = PDFJS.Promise = (function PromiseClosure() {
|
|||||||
deferred.resolve(results);
|
deferred.resolve(results);
|
||||||
return deferred;
|
return deferred;
|
||||||
}
|
}
|
||||||
|
function reject(reason) {
|
||||||
|
if (deferred.isRejected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
results = [];
|
||||||
|
deferred.reject(reason);
|
||||||
|
}
|
||||||
for (var i = 0, ii = promises.length; i < ii; ++i) {
|
for (var i = 0, ii = promises.length; i < ii; ++i) {
|
||||||
var promise = promises[i];
|
var promise = promises[i];
|
||||||
promise.then((function(i) {
|
promise.then((function(i) {
|
||||||
return function(value) {
|
return function(value) {
|
||||||
|
if (deferred.isRejected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
results[i] = value;
|
results[i] = value;
|
||||||
unresolved--;
|
unresolved--;
|
||||||
if (unresolved === 0)
|
if (unresolved === 0)
|
||||||
deferred.resolve(results);
|
deferred.resolve(results);
|
||||||
};
|
};
|
||||||
})(i));
|
})(i), reject);
|
||||||
}
|
}
|
||||||
return deferred;
|
return deferred;
|
||||||
};
|
};
|
||||||
@ -762,12 +772,8 @@ var Promise = PDFJS.Promise = (function PromiseClosure() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
then: function Promise_then(callback, errback, progressback) {
|
then: function Promise_then(callback, errback, progressback) {
|
||||||
if (!callback) {
|
|
||||||
error('Requiring callback' + this.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the promise is already resolved, call the callback directly.
|
// If the promise is already resolved, call the callback directly.
|
||||||
if (this.isResolved) {
|
if (this.isResolved && callback) {
|
||||||
var data = this.data;
|
var data = this.data;
|
||||||
callback.call(null, data);
|
callback.call(null, data);
|
||||||
} else if (this.isRejected && errback) {
|
} else if (this.isRejected && errback) {
|
||||||
@ -775,10 +781,13 @@ var Promise = PDFJS.Promise = (function PromiseClosure() {
|
|||||||
var exception = this.exception;
|
var exception = this.exception;
|
||||||
errback.call(null, error, exception);
|
errback.call(null, error, exception);
|
||||||
} else {
|
} else {
|
||||||
|
if (callback) {
|
||||||
this.callbacks.push(callback);
|
this.callbacks.push(callback);
|
||||||
if (errback)
|
}
|
||||||
|
if (errback) {
|
||||||
this.errbacks.push(errback);
|
this.errbacks.push(errback);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (progressback)
|
if (progressback)
|
||||||
this.progressbacks.push(progressback);
|
this.progressbacks.push(progressback);
|
||||||
|
@ -137,7 +137,8 @@ var WorkerMessageHandler = {
|
|||||||
javaScript: results[6]
|
javaScript: results[6]
|
||||||
};
|
};
|
||||||
loadDocumentPromise.resolve(doc);
|
loadDocumentPromise.resolve(doc);
|
||||||
});
|
},
|
||||||
|
parseFailure);
|
||||||
};
|
};
|
||||||
|
|
||||||
var parseFailure = function parseFailure(e) {
|
var parseFailure = function parseFailure(e) {
|
||||||
@ -261,7 +262,7 @@ var WorkerMessageHandler = {
|
|||||||
|
|
||||||
var onSuccess = function(doc) {
|
var onSuccess = function(doc) {
|
||||||
handler.send('GetDoc', { pdfInfo: doc });
|
handler.send('GetDoc', { pdfInfo: doc });
|
||||||
pdfManager.ensureModel('traversePages', []);
|
pdfManager.ensureModel('traversePages', []).then(null, onFailure);
|
||||||
};
|
};
|
||||||
|
|
||||||
var onFailure = function(e) {
|
var onFailure = function(e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user