企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 1.generator基础 generator函数最大的特点是交出函数的执行权。 ~~~ function *gen(x){ yield x+2; return x; } var g = gen(3); console.log(g.next()); //{value: 5, done: false} console.log(g.next()); //{value: 3, done: true} ~~~ - 1.gen(3) 调用generator函数不会立即执行,而是会返回一个遍历器 - next()方法,会移动内部指针,指向[第一个遇到的yield语句](),上例是执行到x+2为止。next()方法的作用: >分阶段执行generator函数。每次调用next方法,会返回一个对象。 - 返回的对象,表示当前阶段的信息(value 属性和 done 属性) * value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段 ## 2.Generator函数的数据交换 ~~~ function *gen(x){ var y = yield x+2; return y; } ~~~ >Tip:第一个next()传入值没用 ~~~ var g = gen(1); g.next() // { value: 3, done: false } g.next(2) // { value: 2, done: true } ~~~ >Tip:第二个next()如果不传值 ~~~ g.next() // { value: 3, done: false } g.next() // { value: undefined, done: true } ~~~ * next 方法返回值的 value 属性,是 Generator 函数向外输出数据;next 方法还可以接受参数,这是向 Generator 函数体内输入数据。 * 第一个 next 方法的 value 属性,返回表达式 x + 2 的值(3) * 第二个 next 方法带有参数2,这个参数可以传入 Generator 函数,作为上个阶段异步任务的返回结果,被函数体内的变量 y 接收。因此,这一步的 value 属性,返回的就是2(变量 y 的值)。 ### demo01 ~~~ function *gen(x){ var y = yield x+3; yield y; } var g = gen(1); console.log(g.next()) //这个参数作为上个阶段异步任务的返回结果,被第二个next()函数接收 console.log(g.next(13)) ~~~ ### demo02 ~~~ function http(x){ return x+2; } function *getData(){ var y= yield http(10) yield http(y) } var gen = getData(10); console.log(gen.next()) console.log(gen.next(20)) ~~~ ~~~ {value: 12, done: false} {value: 22, done: false} ~~~