build(deps): apply updates
[e-mobility-charging-stations-simulator.git] / ui / web / src / composables / Utils.ts
index 36ecd4b7e2ae52cb52403b5377d6d3713044d633..8cb957abba2c2e10a0edfc20d7daeb29b0a0b69f 100644 (file)
@@ -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<T>(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<T>(obj: T, cb: () => void): void {
   //   if (this.isIterable(obj) === false) cb();
   // }
 
+  public static isPromisePending(promise: Promise<unknown>): boolean {
+    return util.inspect(promise).includes('pending');
+  }
+
   public static async promiseWithTimeout<T>(
     promise: Promise<T>,
     timeoutMs: number,
@@ -31,7 +37,10 @@ export default class Utils {
     // Create a timeout promise that rejects in timeout milliseconds
     const timeoutPromise = new Promise<never>((_, reject) => {
       setTimeout(() => {
-        timeoutCallback();
+        if (Utils.isPromisePending(promise)) {
+          timeoutCallback();
+          // FIXME: The original promise shall be canceled
+        }
         reject(timeoutError);
       }, timeoutMs);
     });