소스 검색

task done?

miskson 2 년 전
부모
커밋
42e18ff140
2개의 변경된 파일59개의 추가작업 그리고 0개의 파일을 삭제
  1. 13 0
      hw17-generators/index.htm
  2. 46 0
      hw17-generators/script.js

+ 13 - 0
hw17-generators/index.htm

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+</head>
+<body>
+    <h1>Generators</h1>
+    <script src="./script.js"></script>
+</body>
+</html>

+ 46 - 0
hw17-generators/script.js

@@ -0,0 +1,46 @@
+const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
+
+function* likeAsync() {
+    console.log(1)
+    console.log(yield 1.5)
+    let res1 = yield delay(2000)
+    console.log(2, res1)
+    let res2 = yield delay(2000)
+    console.log(3, res2)
+    try {
+        console.log(yield fetch("htpsdasd://localhost:10000"))
+    } catch (e) {
+        console.log('GENA ERROR CATCH', e)
+    }
+    let res3 = yield delay(3000)
+    console.log(4, res3)
+}
+
+let likeA = likeAsync()
+
+console.log(likeA.next())
+console.log(likeA.next().value.then(res => console.log(res)))
+
+function run(gena) {
+    let iter = gena()
+    function next(res, err) {
+        let value, done
+        try {
+            if(!err) {
+                //литеральная деструктуризация???
+                [{value, done}] = [iter.next(res)]
+            } else {
+                [{value, done}] = [iter.throw(err)]
+            }
+            if (done) return;
+            if(value && typeof value?.then === 'function') {
+                value.then(next, err => next(undefined, err))
+            } else if (value){
+                next(value)
+            }
+        } catch(e) {
+            console.warn('gena error', e)
+        }
+    }
+    next()
+}