updated waitForChange storeHelper in svelte
This commit is contained in:
@@ -1,18 +1,19 @@
|
|||||||
import { get, type Writable } from "svelte/store";
|
import { get, type Writable } from "svelte/store";
|
||||||
|
|
||||||
export function listenForChange<T>(writable: Writable<T>, cb: (value: T) => void) {
|
|
||||||
const priorValue = get(writable);
|
|
||||||
|
|
||||||
const unsubscribe = writable.subscribe((value) => {
|
|
||||||
if (value !== priorValue) {
|
|
||||||
unsubscribe();
|
|
||||||
cb(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function waitForChange<T>(writable: Writable<T>): Promise<T> {
|
export function waitForChange<T>(writable: Writable<T>): Promise<T> {
|
||||||
return new Promise((resolve) => {
|
let unsubscribe:()=>{};
|
||||||
listenForChange(writable, (value) => resolve(value));
|
const promise = new Promise(resolve => {
|
||||||
|
let receivedInitial = false;
|
||||||
|
let previousValue : any;
|
||||||
|
unsubscribe = writable.subscribe(value => {
|
||||||
|
if (!receivedInitial) {
|
||||||
|
receivedInitial = true;
|
||||||
|
previousValue = value;
|
||||||
|
} else if (value !== previousValue) {
|
||||||
|
resolve(value);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
|
promise.then(unsubscribe);
|
||||||
|
return promise;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user