index.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // function* likeFor(end, step = 1, start = 0) {
  2. // for(let i = start; i < end; i+=step) {
  3. // yield i;
  4. // console.log(i)
  5. // }
  6. // }
  7. // let iter = likeFor(10)
  8. // function* multCall() {
  9. // yield* likeFor(10)
  10. // yield* likeFor(20)
  11. // yield* 'СТОРКА'
  12. // }
  13. // let a = [...multCall()]
  14. // console.log(a)
  15. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  16. function* likeAsync(){
  17. console.log(1)
  18. let res1 = yield delay(2000)
  19. console.log(2, res1)
  20. let res2 = yield delay(2000)
  21. console.log(3, res2)
  22. }
  23. function run(likeAsync) {
  24. let iter = likeAsync()
  25. function next(result, err) {
  26. let value, done
  27. if (!err) {
  28. [{value, done}] = [iter.next(result)]
  29. } else {
  30. [{value, done}] = [iter.throw(err)]
  31. }
  32. if (done) return;
  33. if(value && typeof value?.then === 'function') {
  34. value.then(next, err => next(undefined, err))
  35. } else {
  36. next(value)
  37. }
  38. }
  39. next()
  40. }
  41. run(likeAsync)