export class LaterPromise extends Promise { private readonly _time: number; private readonly _handle: Promise; private _resolve: ($: T) => any; private _reject: ($: any) => any; constructor() { super((resolve, reject) => {}); this._handle = new Promise((resolve, reject) => { this._resolve = resolve; this._reject = reject; }); this._time = Date.now(); } resolved(object: T) { this._resolve(object); } rejected(reason) { this._reject(reason); } function_rejected() { return error => this.rejected(error); } time() { return this._time; } /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of which ever callback is executed. */ then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise { return this._handle.then(onfulfilled, onrejected); } /** * Attaches a callback for only the rejection of the Promise. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of the callback. */ catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise { return this._handle.then(onrejected); } }