UNPKG

monaco-editor

Version:
57 lines (54 loc) 1.53 kB
import { transaction } from '../transaction.js'; import { observableValue } from '../observables/observableValue.js'; /** * A promise whose state is observable. */ class ObservablePromise { constructor(promise) { this._value = observableValue(this, undefined); /** * The current state of the promise. * Is `undefined` if the promise didn't resolve yet. */ this.promiseResult = this._value; this.promise = promise.then(value => { transaction(tx => { /** @description onPromiseResolved */ this._value.set(new PromiseResult(value, undefined), tx); }); return value; }, error => { transaction(tx => { /** @description onPromiseRejected */ this._value.set(new PromiseResult(undefined, error), tx); }); throw error; }); } } class PromiseResult { constructor( /** * The value of the resolved promise. * Undefined if the promise rejected. */ data, /** * The error in case of a rejected promise. * Undefined if the promise resolved. */ error) { this.data = data; this.error = error; } /** * Returns the value if the promise resolved, otherwise throws the error. */ getDataOrThrow() { if (this.error) { throw this.error; } return this.data; } } export { ObservablePromise, PromiseResult };