X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=ui%2Fweb%2Fsrc%2Fcomposables%2FUtils.ts;h=8cb957abba2c2e10a0edfc20d7daeb29b0a0b69f;hb=c7d835bf4127be734591fc24ce0df49fb1377153;hp=36ecd4b7e2ae52cb52403b5377d6d3713044d633;hpb=ebbfbf1c01e010d051956867484b74a94237f546;p=e-mobility-charging-stations-simulator.git diff --git a/ui/web/src/composables/Utils.ts b/ui/web/src/composables/Utils.ts index 36ecd4b7..8cb957ab 100644 --- a/ui/web/src/composables/Utils.ts +++ b/ui/web/src/composables/Utils.ts @@ -1,3 +1,5 @@ +import util from 'node:util'; + export default class Utils { // STATE public static isUndefined(value: unknown): boolean { @@ -9,17 +11,21 @@ export default class Utils { return value as T; } - public static isIterable(obj: any): boolean { + public static isIterable(obj: T): boolean { if (obj === null || obj === undefined) { return false; } - return typeof obj[Symbol.iterator] === 'function'; + return typeof (obj as any)[Symbol.iterator] === 'function'; } // public static ifNotIterableDo(obj: T, cb: () => void): void { // if (this.isIterable(obj) === false) cb(); // } + public static isPromisePending(promise: Promise): boolean { + return util.inspect(promise).includes('pending'); + } + public static async promiseWithTimeout( promise: Promise, timeoutMs: number, @@ -31,7 +37,10 @@ export default class Utils { // Create a timeout promise that rejects in timeout milliseconds const timeoutPromise = new Promise((_, reject) => { setTimeout(() => { - timeoutCallback(); + if (Utils.isPromisePending(promise)) { + timeoutCallback(); + // FIXME: The original promise shall be canceled + } reject(timeoutError); }, timeoutMs); });