生成器

        生成器是ES6提供的另一种异步解决方案,它将协程带入了JavaScript。

协程 VS 线程

  • 线程。线程从属于进程,线程是最小的执行单元。它是由操作系统(处于核态)管理和调度的一种资源(核态)。
  • 协程。是一种比线程更加轻量级的存在,一个线程可以拥有多个协程。协程的调度完全由用户(操作系统处于用户态)控制。

生成器函数

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}
const hw = helloWorldGenerator();

        生成器函数会立即返回一个生成器对象。直到用户将控制权交给这个生成器。

生成器对象

        生成器对象同时是一个可迭代对象。

next()

hw.next()

        通过next方法来执行生成器,返回一个由 yield表达式生成的值。

return()

        生成器对象提供了return方法来手动控制生成器的结束。return() 方法返回给定的值并结束生成器。

throw()

        throw() 方法用来向生成器抛出异常,并恢复生成器的执行,返回带有 done 及 value 两个属性的对象。