diff options
-rw-r--r-- | src/observable.ts | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/observable.ts b/src/observable.ts index f00b845..15a1a2e 100644 --- a/src/observable.ts +++ b/src/observable.ts @@ -12,10 +12,8 @@ export class OVar<T> { } get value() { return this._value } - set value(v: T) { - this._value = v; - this.observers.forEach(o => o(v)) - } + set value(v: T) { this._value = v; this.change() } + change() { this.observers.forEach(o => o(this._value)) } onchange(handler: (v: T) => unknown): () => void { this.observers.push(handler) @@ -31,4 +29,14 @@ export class OVar<T> { this.onchange(v => uv.value = fn(v)) return uv; } + wait_for(val: T) { + return new Promise<void>(r => { + const abort = this.onchangeinit(v => { + if (v == val) { + r() + abort() + } + }) + }) + } } |