refactor(ui): sync promiseWithTimeout() helper
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 24 Apr 2023 22:41:00 +0000 (00:41 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 24 Apr 2023 22:41:00 +0000 (00:41 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
ui/web/src/composables/Utils.ts

index 8ce3b6eca5b37c27dca29faf6a970ea8a0f9a980..8cb957abba2c2e10a0edfc20d7daeb29b0a0b69f 100644 (file)
@@ -1,3 +1,5 @@
+import util from 'node:util';
+
 export default class Utils {
   // STATE
   public static isUndefined(value: unknown): boolean {
@@ -20,6 +22,10 @@ export default class Utils {
   //   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);
     });