生成器
生成器是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 两个属性的对象。