生成器
Gnerator---生成器 是ES6新增的一种函数控制、使用的方案
1:yiled来控制代码执行
2:生成器函数的返回值也是生成器---同时生成器也是特殊的迭代器 所以可以使用next()方法
生成器的基本使用以及yield控制流程
1 function* foo() { 2 const value1 = 100 3 console.log("第一段", value1); 4 //yield后面跟着的是返回的value值 5 yield value1 6 const value2 = 200 7 console.log("第二段", value2); 8 yield 2 9 const value3 = 300 10 console.log("第三段", value3); 11 //后面没有值的话value就是undefined 12 yield 13 const value4 = 400 14 console.log("第四段", value4); 15 yield 16 } 17 const generator = foo() 18 //第一段 生成器是一个特殊的迭代器 19 20 console.log("返回值1", generator.next()); 21 console.log("返回值2", generator.next()); 22 console.log("返回值3", generator.next()); 23 console.log("返回值4", generator.next());

生成器的传参方法
1 function* foo(num) { 2 const value1 = 100 * num 3 console.log("第一段", value1) 4 //给第二段传参 5 const n = yield value1 6 const value2 = 200 * n 7 console.log("第二段", value2); 8 const n2 = yield 2 9 const value3 = 300 * n2 10 console.log("第三段", value3); 11 yield 12 const value4 = 400 13 console.log("第四段", value4); 14 yield 15 } 16 const generator = foo(5) 17 //第一段 生成器是一个特殊的迭代器 18 //1:生成器传递参数 19 console.log("返回值1", generator.next()); 20 //第二段代码 21 console.log("返回值2", generator.next(10)); 22 console.log("返回值3", generator.next(0.5)); 23 console.log("返回值4", generator.next());

生成器的return和throw方法
return----return传值后,这个生成器就会结束,之后调用next不会继续生成值了
function* foo(num) { const value1 = 100 * num console.log("第一段", value1) //给第二段传参 const n = yield value1 const value2 = 200 * n console.log("第二段", value2); const n2 = yield 2 const value3 = 300 * n2 console.log("第三段", value3); yield 123 const value4 = 400 console.log("第四段", value4); yield 456 } const generator = foo(5) console.log(generator.next()); //提前终止生成器函数代码继续执行 console.log(generator.return(15)); console.log(generator.next(10)); console.log(generator.next(0.5));

throw----抛出异常后可以在生成器函数中捕获异常
1 function* foo() { 2 const value1 = 100 3 console.log(value1); 4 try { 5 yield 1000 6 } catch (err) { 7 console.log("内部捕获异常:", err); 8 9 } 10 const value2 = 200 11 console.log(value2); 12 yield 200 13 } 14 const generator = foo() 15 console.log(generator.next()); 16 generator.throw("抛出异常") 17 console.log(generator.next());


浙公网安备 33010602011771号