diff options
Diffstat (limited to 'packages/taler-wallet-core/src/util/promiseUtils.ts')
-rw-r--r-- | packages/taler-wallet-core/src/util/promiseUtils.ts | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/util/promiseUtils.ts b/packages/taler-wallet-core/src/util/promiseUtils.ts index d152a12f4..bc1e40260 100644 --- a/packages/taler-wallet-core/src/util/promiseUtils.ts +++ b/packages/taler-wallet-core/src/util/promiseUtils.ts @@ -70,3 +70,43 @@ export class AsyncCondition { this.promCap = undefined; } } + +/** + * Flag that can be raised to notify asynchronous waiters. + * + * You can think of it as a promise that can + * be un-resolved. + */ +export class AsyncFlag { + private promCap?: OpenedPromise<void> = undefined; + private internalFlagRaised: boolean = false; + + constructor() {} + + /** + * Wait until the flag is raised. + * + * Reset if before returning. + */ + wait(): Promise<void> { + if (this.internalFlagRaised) { + return Promise.resolve(); + } + if (!this.promCap) { + this.promCap = openPromise<void>(); + } + return this.promCap.promise; + } + + raise(): void { + this.internalFlagRaised = true; + if (this.promCap) { + this.promCap.resolve(); + } + } + + reset(): void { + this.internalFlagRaised = false; + this.promCap = undefined; + } +} |