export class ObservablePromise { private _status: 'pending' | 'fulfilled' | 'rejected' = 'pending'; private _promise: Promise; constructor(promise: Promise) { this._promise = promise .then( (value: T) => { this._status = 'fulfilled'; return value; }, (error) => { this._status = 'rejected'; throw error; } ); } get promise(): Promise { return this._promise; } get status(): 'pending' | 'fulfilled' | 'rejected' { return this._status; } }