in src/SyncTasks.ts [473:498]
private _resolveFailureCallback(callback: CallbackSet<T, any>): void {
if (callback.failFunc) {
run(() => {
const ret = callback.failFunc!!!(this._storedErrResolution);
if (isCancelable(ret)) {
if (callback.wasCanceled) {
SyncTask.cancelOtherInternal(ret, callback.cancelContext);
} else {
callback.task!!!.onCancel(context => SyncTask.cancelOtherInternal(ret, context));
}
// Note: don't care if ret is canceled. We don't need to bubble out since this is already rejected.
}
if (isThenable(ret)) {
ret.then(r => { callback.task!!!.resolve(r); }, e => { callback.task!!!.reject(e); });
} else {
// The failure has been handled: ret is the resolved value.
callback.task!!!.resolve(ret);
}
}, e => {
this._handleException(e, 'SyncTask caught exception in failure block: ' + e.toString());
callback.task!!!.reject(e);
});
} else {
callback.task!!!.reject(this._storedErrResolution);
}
}