diff options
author | Florian Dold <florian@dold.me> | 2024-02-13 10:53:43 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-02-15 21:56:54 +0100 |
commit | 70a803038f1cbe05dc4779bdd87376fd073421be (patch) | |
tree | 6607d69f6906ada9f912e31d9a9e3b65560a7326 /packages/taler-wallet-core/src/util/promiseUtils.ts | |
parent | 2c17e98c336d96f955ec82ad0a1b164e3da90103 (diff) | |
download | wallet-core-70a803038f1cbe05dc4779bdd87376fd073421be.tar.gz wallet-core-70a803038f1cbe05dc4779bdd87376fd073421be.tar.bz2 wallet-core-70a803038f1cbe05dc4779bdd87376fd073421be.zip |
implement task shepherd, many small fixes and tweaksdev/dold/task-shepherd
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; + } +} |