Skip to content

Commit 3dadde5

Browse files
committed
Propagate promise rejections so we show the fallback.
-Adds rejection support to Promise.All. -Makes promise.then() callback optional.
1 parent bf2ebd3 commit 3dadde5

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

src/core.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ var Page = (function PageClosure() {
156156
var self = this;
157157
var promise = new Promise();
158158

159+
function reject(e) {
160+
promise.reject(e);
161+
}
162+
159163
var pageListPromise = new Promise();
160164
var annotationListPromise = new Promise();
161165

@@ -170,7 +174,7 @@ var Page = (function PageClosure() {
170174
this.idCounters);
171175

172176
var dataPromises = Promise.all(
173-
[contentStreamPromise, resourcesPromise]);
177+
[contentStreamPromise, resourcesPromise], reject);
174178
dataPromises.then(function(data) {
175179
var contentStream = data[0];
176180
var resources = data[1];
@@ -181,7 +185,8 @@ var Page = (function PageClosure() {
181185
opListPromise.then(function(data) {
182186
pageListPromise.resolve(data);
183187
});
184-
}
188+
},
189+
reject
185190
);
186191
});
187192

@@ -195,7 +200,8 @@ var Page = (function PageClosure() {
195200
});
196201
}
197202
);
198-
}
203+
},
204+
reject
199205
);
200206

201207
Promise.all([pageListPromise, annotationListPromise]).then(
@@ -211,7 +217,8 @@ var Page = (function PageClosure() {
211217
Util.extendObj(pageData.dependencies, annotationData.dependencies);
212218

213219
promise.resolve(pageData);
214-
}
220+
},
221+
reject
215222
);
216223

217224
return promise;

src/util.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -672,16 +672,26 @@ var Promise = PDFJS.Promise = (function PromiseClosure() {
672672
deferred.resolve(results);
673673
return deferred;
674674
}
675+
function reject(reason) {
676+
if (deferred.isRejected) {
677+
return;
678+
}
679+
results = [];
680+
deferred.reject(reason);
681+
}
675682
for (var i = 0, ii = promises.length; i < ii; ++i) {
676683
var promise = promises[i];
677684
promise.then((function(i) {
678685
return function(value) {
686+
if (deferred.isRejected) {
687+
return;
688+
}
679689
results[i] = value;
680690
unresolved--;
681691
if (unresolved === 0)
682692
deferred.resolve(results);
683693
};
684-
})(i));
694+
})(i), reject);
685695
}
686696
return deferred;
687697
};
@@ -762,22 +772,21 @@ var Promise = PDFJS.Promise = (function PromiseClosure() {
762772
},
763773

764774
then: function Promise_then(callback, errback, progressback) {
765-
if (!callback) {
766-
error('Requiring callback' + this.name);
767-
}
768-
769775
// If the promise is already resolved, call the callback directly.
770-
if (this.isResolved) {
776+
if (this.isResolved && callback) {
771777
var data = this.data;
772778
callback.call(null, data);
773779
} else if (this.isRejected && errback) {
774780
var error = this.error;
775781
var exception = this.exception;
776782
errback.call(null, error, exception);
777783
} else {
778-
this.callbacks.push(callback);
779-
if (errback)
784+
if (callback) {
785+
this.callbacks.push(callback);
786+
}
787+
if (errback) {
780788
this.errbacks.push(errback);
789+
}
781790
}
782791

783792
if (progressback)

src/worker.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ var WorkerMessageHandler = {
137137
javaScript: results[6]
138138
};
139139
loadDocumentPromise.resolve(doc);
140-
});
140+
},
141+
parseFailure);
141142
};
142143

143144
var parseFailure = function parseFailure(e) {
@@ -261,7 +262,7 @@ var WorkerMessageHandler = {
261262

262263
var onSuccess = function(doc) {
263264
handler.send('GetDoc', { pdfInfo: doc });
264-
pdfManager.ensureModel('traversePages', []);
265+
pdfManager.ensureModel('traversePages', []).then(null, onFailure);
265266
};
266267

267268
var onFailure = function(e) {

0 commit comments

Comments
 (0)