Add error backs for promises.
This commit is contained in:
parent
dba1a7dc6f
commit
dddcb9c91b
30
src/core.js
30
src/core.js
@ -398,17 +398,25 @@ var Page = (function PageClosure() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Once the IRQueue and fonts are loaded, perform the actual rendering.
|
// Once the IRQueue and fonts are loaded, perform the actual rendering.
|
||||||
this.displayReadyPromise.then(function pageDisplayReadyPromise() {
|
this.displayReadyPromise.then(
|
||||||
var gfx = new CanvasGraphics(ctx, this.objs, textLayer);
|
function pageDisplayReadyPromise() {
|
||||||
try {
|
var gfx = new CanvasGraphics(ctx, this.objs, textLayer);
|
||||||
this.display(gfx, callback);
|
try {
|
||||||
} catch (e) {
|
this.display(gfx, callback);
|
||||||
if (self.callback)
|
} catch (e) {
|
||||||
self.callback(e);
|
if (callback)
|
||||||
|
callback(e);
|
||||||
|
else
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}.bind(this),
|
||||||
|
function pageDisplayReadPromiseError(reason) {
|
||||||
|
if (callback)
|
||||||
|
callback(reason);
|
||||||
else
|
else
|
||||||
throw e;
|
throw reason;
|
||||||
}
|
}
|
||||||
}.bind(this));
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -722,8 +730,8 @@ var PDFDoc = (function PDFDocClosure() {
|
|||||||
|
|
||||||
messageHandler.on('page_error', function pdfDocError(data) {
|
messageHandler.on('page_error', function pdfDocError(data) {
|
||||||
var page = this.pageCache[data.pageNum];
|
var page = this.pageCache[data.pageNum];
|
||||||
if (page.callback)
|
if (page.displayReadyPromise) {
|
||||||
page.callback(data.error);
|
page.displayReadyPromise.reject(data.error);}
|
||||||
else
|
else
|
||||||
throw data.error;
|
throw data.error;
|
||||||
}, this);
|
}, this);
|
||||||
|
30
src/util.js
30
src/util.js
@ -206,6 +206,8 @@ var Promise = (function PromiseClosure() {
|
|||||||
*/
|
*/
|
||||||
function Promise(name, data) {
|
function Promise(name, data) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.isRejected = false;
|
||||||
|
this.error = null;
|
||||||
// If you build a promise and pass in some data it's already resolved.
|
// If you build a promise and pass in some data it's already resolved.
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
this.isResolved = true;
|
this.isResolved = true;
|
||||||
@ -216,6 +218,7 @@ var Promise = (function PromiseClosure() {
|
|||||||
this._data = EMPTY_PROMISE;
|
this._data = EMPTY_PROMISE;
|
||||||
}
|
}
|
||||||
this.callbacks = [];
|
this.callbacks = [];
|
||||||
|
this.errbacks = [];
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Builds a promise that is resolved when all the passed in promises are
|
* Builds a promise that is resolved when all the passed in promises are
|
||||||
@ -282,6 +285,9 @@ var Promise = (function PromiseClosure() {
|
|||||||
if (this.isResolved) {
|
if (this.isResolved) {
|
||||||
throw 'A Promise can be resolved only once ' + this.name;
|
throw 'A Promise can be resolved only once ' + this.name;
|
||||||
}
|
}
|
||||||
|
if (this.isRejected) {
|
||||||
|
throw 'The Promise was already rejected ' + this.name;
|
||||||
|
}
|
||||||
|
|
||||||
this.isResolved = true;
|
this.isResolved = true;
|
||||||
this.data = data || null;
|
this.data = data || null;
|
||||||
@ -292,7 +298,24 @@ var Promise = (function PromiseClosure() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
then: function promiseThen(callback) {
|
reject: function proimseReject(reason) {
|
||||||
|
if (this.isRejected) {
|
||||||
|
throw 'A Promise can be rejected only once ' + this.name;
|
||||||
|
}
|
||||||
|
if (this.isResolved) {
|
||||||
|
throw 'The Promise was already resolved ' + this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isRejected = true;
|
||||||
|
this.error = reason || null;
|
||||||
|
var errbacks = this.errbacks;
|
||||||
|
|
||||||
|
for (var i = 0, ii = errbacks.length; i < ii; i++) {
|
||||||
|
errbacks[i].call(null, reason);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
then: function promiseThen(callback, errback) {
|
||||||
if (!callback) {
|
if (!callback) {
|
||||||
throw 'Requiring callback' + this.name;
|
throw 'Requiring callback' + this.name;
|
||||||
}
|
}
|
||||||
@ -301,8 +324,13 @@ var Promise = (function PromiseClosure() {
|
|||||||
if (this.isResolved) {
|
if (this.isResolved) {
|
||||||
var data = this.data;
|
var data = this.data;
|
||||||
callback.call(null, data);
|
callback.call(null, data);
|
||||||
|
} else if (this.isRejected && errorback) {
|
||||||
|
var error = this.error;
|
||||||
|
errback.call(null, error);
|
||||||
} else {
|
} else {
|
||||||
this.callbacks.push(callback);
|
this.callbacks.push(callback);
|
||||||
|
if (errback)
|
||||||
|
this.errbacks.push(errback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user