es6——生成器函数
2022/8/27 23:53:13
本文主要是介绍es6——生成器函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章结构
生成器函数的定义与使用
给生成器函数传参
给生成器函数异步传参
生成器函数的应用场景
解决回调地域
1 //生成器函数的定义与使用 2 function *fn(){ 3 //yield类似于断电 4 console.log(111); 5 yield `第一段` 6 console.log(222); 7 yield `第二段` 8 console.log(333); 9 yield `第三段` 10 console.log(444); 11 } 12 13 //调用 14 let iterator = fn(); 15 //每次调用next会执行生成器函数中yield段代码,并且返回包含yield的值的对象 16 console.log(iterator.next()); 17 console.log(iterator.next()); 18 console.log(iterator.next()); 19 console.log(iterator.next()); 20 21 for(let i of fn()){ 22 console.log(i); 23 }
给生成器函数传参
1 function * fn(arg){ 2 console.log(arg); 3 let one = yield 1; 4 console.log(one); 5 let two = yield 2; 6 console.log(two); 7 let three = yield 3; 8 console.log(three); 9 } 10 11 //执行获取迭代器对象 12 let iterator = fn('AAA'); 13 iterator.next(); 14 //从第二次开始next的参数会成为yield的返回值 15 iterator.next('BBB'); 16 iterator.next('CCC'); 17 iterator.next('DDD');
给生成器函数异步传参
1 function getname() { 2 setTimeout(() => { 3 let name = 'zhangsan'; 4 iterator.next(name); 5 }, 1000) 6 } 7 8 function getdata() { 9 setTimeout(() => { 10 let data = 'data'; 11 iterator.next(data); 12 }, 2000) 13 } 14 15 function gettime() { 16 setTimeout(() => { 17 let time = 'time'; 18 iterator.next(time); 19 }, 3000) 20 } 21 22 function* fn() { 23 getname(); 24 // 可以使用一个变量去接收yield的返回值,yield返回上一次调用iterator.next()的参数 25 let one = yield; 26 console.log(one); 27 getdata(); 28 let two = yield; 29 console.log(two); 30 gettime(); 31 let three = yield; 32 console.log(three); 33 } 34 35 let iterator = fn(); 36 iterator.next();
生成器函数的应用场景
解决回调地域
1 setTimeout(() => { 2 console.log(111); 3 setTimeout(() =>{ 4 console.log(222); 5 setTimeout(()=>{ 6 console.log(333) 7 },3000) 8 },2000) 9 },1000) 10 11 function fn1(){ 12 setTimeout(()=>{ 13 console.log(111); 14 iterator.next(); 15 },1000) 16 } 17 18 function fn2(){ 19 setTimeout(()=>{ 20 console.log(222); 21 iterator.next(); 22 },1000) 23 } 24 25 function fn3(){ 26 setTimeout(()=>{ 27 console.log(333); 28 iterator.next(); 29 },1000) 30 } 31 32 function *fn(){ 33 fn1(); 34 yield; 35 fn2(); 36 yield; 37 fn3(); 38 yield; 39 } 40 41 let iterator = fn(); 42 iterator.next();
这篇关于es6——生成器函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding