diff options
author | metamuffin <metamuffin@disroot.org> | 2023-10-01 21:30:09 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-10-01 21:30:09 +0200 |
commit | 1a42804b2df0c443588863e77c1c4c619a33533b (patch) | |
tree | d0c16f79ee5568fb15a5b55f84c57dc8e36e1ebd | |
parent | 33aaa11e8d88edad10dcb953f063b59c38cfe94d (diff) | |
download | jshelper-1a42804b2df0c443588863e77c1c4c619a33533b.tar jshelper-1a42804b2df0c443588863e77c1c4c619a33533b.tar.bz2 jshelper-1a42804b2df0c443588863e77c1c4c619a33533b.tar.zst |
ovar wait_for
-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() + } + }) + }) + } } |