From ed6de4446f997f5f40093449bfa23205e6afc1aa Mon Sep 17 00:00:00 2001
From: Patrizio Bekerle <patrizio@bekerle.com>
Date: Fri, 3 Apr 2020 09:59:51 +0200
Subject: [PATCH] Add async foreach functions

---
 packages/common/utils.js | 48 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/packages/common/utils.js b/packages/common/utils.js
index 56c870c0..d6e8753c 100644
--- a/packages/common/utils.js
+++ b/packages/common/utils.js
@@ -248,7 +248,7 @@ export const getAssetURL = (path) => {
  * @param timeout
  * @param interval
  */
-export const pollFunc =  (fn, timeout, interval) => {
+export const pollFunc = (fn, timeout, interval) => {
     var startTime = (new Date()).getTime();
     interval = interval || 1000;
 
@@ -264,3 +264,49 @@ export const pollFunc =  (fn, timeout, interval) => {
         }
     })();
 };
+
+/**
+ * Doing a async foreach for non-linear integer keys
+ *
+ * @param array
+ * @param callback
+ * @returns {Promise<void>}
+ */
+export async function asyncObjectForEach(array, callback) {
+    const keys = Object.keys(array);
+
+    for (let index = 0; index < keys.length; index++) {
+        const key = keys[index];
+        await callback(array[key], key, array);
+    }
+}
+
+/**
+ * Doing a async foreach for non-linear integer keys with a copy of the array
+ *
+ * @param array
+ * @param callback
+ * @returns {Promise<void>}
+ */
+export async function asyncCopyObjectForEach(array, callback) {
+    const arrayCopy = {...array};
+    const keys = Object.keys(arrayCopy);
+
+    for (let index = 0; index < keys.length; index++) {
+        const key = keys[index];
+        await callback(arrayCopy[key], key, arrayCopy);
+    }
+}
+
+/**
+ * Doing a async foreach for linear integer keys
+ *
+ * @param array
+ * @param callback
+ * @returns {Promise<void>}
+ */
+export async function asyncArrayForEach(array, callback) {
+    for (let index = 0; index < array.length; index++) {
+        await callback(array[index], index, array);
+    }
+}
-- 
GitLab