aboutsummaryrefslogtreecommitdiff
path: root/src/observable.ts
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-10-01 21:30:09 +0200
committermetamuffin <metamuffin@disroot.org>2023-10-01 21:30:09 +0200
commit1a42804b2df0c443588863e77c1c4c619a33533b (patch)
treed0c16f79ee5568fb15a5b55f84c57dc8e36e1ebd /src/observable.ts
parent33aaa11e8d88edad10dcb953f063b59c38cfe94d (diff)
downloadjshelper-1a42804b2df0c443588863e77c1c4c619a33533b.tar
jshelper-1a42804b2df0c443588863e77c1c4c619a33533b.tar.bz2
jshelper-1a42804b2df0c443588863e77c1c4c619a33533b.tar.zst
ovar wait_for
Diffstat (limited to 'src/observable.ts')
-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()
+ }
+ })
+ })
+ }
}