wana
Version:
Easy observable state for React
24 lines (22 loc) • 560 B
text/typescript
import { Auto } from './auto'
import { noto } from './noto'
/**
* Create a promise to resolve when the given condition returns true.
* Any observable access in the condition is tracked.
*/
export const when = (condition: () => boolean): Promise<void> =>
new Promise((resolve, reject) => {
const auto = new Auto({
onDirty() {
if (noto(() => this.run(condition))) {
this.dispose()
resolve()
}
},
onError(error) {
this.dispose()
reject(error)
},
})
auto.onDirty()
})