aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/observable.ts16
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()
+ }
+ })
+ })
+ }
}