Răsfoiți Sursa

Merge pull request #392 from smiclea/fix-waitfor-util

Fix `waitFor` utility function
Dorin Paslaru 6 ani în urmă
părinte
comite
6b75d1c453
1 a modificat fișierele cu 11 adăugiri și 14 ștergeri
  1. 11 14
      src/utils/ObjectUtils.js

+ 11 - 14
src/utils/ObjectUtils.js

@@ -55,22 +55,19 @@ class ObjectUtils {
     return result
   }
 
-  static waitFor(predicate: () => boolean, timeout?: number = 15000): Promise<void> {
-    let start = new Date().getTime()
-    let test = () => new Promise((resolve, reject) => {
+  static waitFor(predicate: () => boolean, timeoutMs?: number = 15000): Promise<void> {
+    let wait = (ms: number) => new Promise(resolve => { setTimeout(() => { resolve() }, ms) })
+    let startTime = new Date().getTime()
+    let testLoop = (): Promise<void> => {
       if (predicate()) {
-        resolve()
-        return
+        return Promise.resolve()
       }
-      setTimeout(() => {
-        if (new Date().getTime() - start < timeout) {
-          test()
-        } else {
-          reject(`Timeout: waiting for more than ${timeout} ms`)
-        }
-      }, 1000)
-    })
-    return test()
+      if (new Date().getTime() - startTime > timeoutMs) {
+        return Promise.reject(`Timeout: waiting for more than ${timeoutMs} ms`)
+      }
+      return wait(1000).then(() => testLoop())
+    }
+    return testLoop()
   }
 }