js生成器Generator

js生成器Generator

使用 function* 语法和一个或多个 yield 表达式以创建一个函数即为生成器,当然它的返回值就是一个迭代器即生成器。

Generator可以使函数分段执行,yield 可以返回值。调用使用next

它不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示区别。其实整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都用 yield 语句注明。

next 方法的作用是分阶段执行 Generator 函数。每次调用 next 方法,会返回一个对象,这个对象就是具有两个属性(done (done=false) 和 value (value=operand))的 IteratorResult 对象。value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段。

  // 生成器Generator
      function* fun() {
        console.log(1);
        let a = yield "aa";
        console.log(a);
        let b = yield "bb";
        console.log(b);
      }
      let genObj = fun();
      let i = genObj.next(10); //输出1
      let j = genObj.next(20); //输出2
      let m = genObj.next(30); //输出3
      console.log(i, j, m);  //{value: "aa", done: false} {value: "bb", done: false} {value: undefined, done: true}
原文地址:https://www.cnblogs.com/gao7/p/15019024.html