Combining generator functions and promises

<script>
function run(generator) {
    var it = generator();
    function go(result) {
      if (result.done) {
        return result.value;
      }
      return result.value.then(function (value) {
        return go(it.next(value));
      }, function (error) {
        return go(it.throw(error));
      })
    }
    go(it.next());
  }




  function getFoo() {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        resolve('foo');
      }, 5000)

    })
  }


  run(function* () {
    try {
      var foo = yield getFoo();
      console.log(foo);
    } catch (e) {
      console.log(e);
    }
  });

</script>


   相同的功能  asyn 函数实现

<script>

  function getFoo() {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        resolve('foo');
      }, 5000)

    })
  }


  async function run() {
    try {
      var foo = await getFoo();
      console.log(foo);
    } catch (e) {
      console.log(e);
    }
  };
  run()
</script>





Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326299567&siteId=291194637