Gennadysht 2 rokov pred
rodič
commit
8fd160db8b
1 zmenil súbory, kde vykonal 61 pridanie a 0 odobranie
  1. 61 0
      js/17_async/hw_17_01_luke.html

+ 61 - 0
js/17_async/hw_17_01_luke.html

@@ -0,0 +1,61 @@
+<header>
+    fetch improved
+</header>
+
+<body>
+    <script>
+        const improovedFetch = async (url) => {
+            let lukeRes = await fetch(url);
+            let luke = await lukeRes.json();
+            let result = {};
+            let retrievers = [];
+            let valueArr = [];
+            for (let key in luke) {
+                let value = luke[key];
+                let isArray = Array.isArray(value);
+                if (typeof value == "string") {
+                    valueArr.push(value);
+                }
+                else if (isArray) {
+                    valueArr = value.filter(val => typeof val == "string");
+                }
+                valueArr = valueArr.filter(val => val.startsWith("https://swapi.dev/api/"));
+                if (valueArr.length > 0) {
+                    for (let urlStr of valueArr) {
+                        retrievers.push(fetch(urlStr)
+                            .then(res => res.json())
+                            .then(
+                                res => {
+                                    let result =
+                                    {
+                                        key: key,
+                                        val: res,
+                                        isArray: isArray
+                                    };
+                                    return result;
+                                }));
+                    }
+                }
+                else {
+                    result[key] = value;
+                }
+            }
+            let results = [result, ...await Promise.all(retrievers)];
+            results.reduce((a, v) => {
+                let { key, val, isArray } = v;
+                if (isArray) {
+                    let aVal = a[key];
+                    if (!aVal) 
+                        a[key] = aVal = [];
+                    aVal.push(val);
+                }
+                else {
+                    a[key] = val;
+                }
+                return a;
+            });
+            return result;
+        }
+        let res = improovedFetch('https://swapi.dev/api/people/1/');
+    </script>
+</body>