generator

Promise 与 generator函数 Promise 与 generator函数一. 回调地狱二. Promise使用PromiseGenerator 函数 作者: DocWhite白先生 什么是Promise?如果还不知道什么是Promise推荐读 阮一峰老师的ES6入门 里面有关于 ES6新特性和Promise更全面和学术话的介绍。 一. 回调地狱 在说Promise之前,先聊聊一个前端开发最常见的烦恼:回调地狱,什么是回调回调地... 阅读详情

generator生成器

1、基本概念

执行Generator函数会返回一个迭代器对象,也就是说,Generator函数还是一个迭代器对象生成的函数,返回的迭代器对象,可以依次遍历Generator函数内部的每一个状态,生成器也是一个函数

跟普通函数的区别

1、function关键字与函数名之间有一个星号
2、函数体内部使用yield表达式,定义不同的内部状态
3、·Generator·函数不能跟new一起使用,会报错

2、generator的基本使用

(1)定义generator函数

在function关键字和函数名之间加一个*号就表示这是一个generator函数

function * show(){
	yield 语句;
	yield 语句;
}

(2)generator函数的调用

        function * show(){
            yield 1;
            yield 2;
            yield 3;
        }
        let p=show();
        console.log(p);
        //generator对象上p有一个next方法,执行后返回一个对象,对象里是一个yield值value属性和done属性为false
        console.log(p.next());
        console.log(p.next());
        console.log(p.next());
        //当done属性为true时表示generator里面的内容执行完毕,如果还继续调用next方法,返回值value为undefined
        console.log(p.next());

在这里插入图片描述

(3)generator函数批量处理yield

注意:yield关键字只能在生成器generator函数中使用,否则会报错

        function * show(arr){
            for(let i=0;i<arr.length;i++){
                yield arr[i];
            }
        }
        let p=show([1,2,3,4]);
        console.log(p);
        console.log(p.next());

在这里插入图片描述

(4)generator函数表达式

除了可以通过函数声明的方式创建生成器的函数,也可以通过函数表达式创建generator生成器
注意:不能通过箭头函数创建生成器

        let show=function *(arr){
            for(let i=0;i<arr.length;i++){
                yield arr[i];
            }
        }
        let p=show([1,2,3,4]);
        console.log(p);
        console.log(p.next());

(5)generator不同的调用

循环

for...of适合generator循环,但是不会遍历return后面的内容

        function * show(){
            yield 1;
            yield 2;
            yield 3;
        }
        let p=show();
        for(let val of p){
            console.log(val);
        }

在这里插入图片描述

解构
        function * show(){
            yield 1;
            yield 2;
            yield 3;
        }
        let p=show();
        let [a,b,c]=show();
        console.log(a,b,c);

在这里插入图片描述

扩展运算符
        function * show(){
            yield 1;
            yield 2;
            yield 3;
        }
        let p=show();
        console.log(...p);

在这里插入图片描述

Array.from()
        function * show(){
            yield 1;
            yield 2;
            yield 3;
        }
        let p=show();
        console.log(Array.from(p));

在这里插入图片描述

(6)对象的生成器方法

对象生成器方法

由于生成器本身就是函数,因此可以添加到对象中,成为对象的方法

        let obj={
            // createIterator:function *(arr){
            //     for(let i=0;i<arr.length;i++){
            //         yield arr[i]
            //     }
            // }
            //也可用ES6对象方法简写创建生成器
             *createIterator(arr){
                for(let i=0;i<arr.length;i++){
                    yield arr[i]
                }
            }
        }
        let iterator=obj.createIterator([1,2,3]);
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());

在这里插入图片描述

可迭代对象和for…of循环

具有Symbol.iterator方法的对象,通过这个方法可以创建一个迭代器对象.因此所有通过生成器创建迭代器都是迭代对象, 诸如字符串, 数组,Set,Map ,都默认具有迭代器,

而for...of 循环的本质就是通过每次调用迭代对象的next()方法, 并将迭代器返回的 结果对象中的value属性值存到一个变量中, 循环执行直到结果对象中done属性值为true为止

let arr = [10,20,30]
for(let num of arr){
    console.log(num)
}

(7)generator生成器处理异步

 function run(generator){
            let obj=generator();
            console.log('obj',obj);

            //执行第一次
            let res=obj.next();
            console.log('res',res);

            //递归调用判断done是否为true执行完毕
            function step(){
                if(!res.done){
                    //判断res.done是否为true,是就执行完毕,不是就继续递归调用step函数迭代
                    res=obj.next();
                    console.log(res);
                    step();
                }
            }
            step();
        }

        run(
            //生成一个生成器,传入到run函数generator
            function *(){
                yield 10;
                yield 20;
                yield 30;
            }
        )

在这里插入图片描述

处理本地异步程序
        //generator处理本地异步程序
        function asyncFun(num){
            return function(cb){
                setTimeout(function(){
                    cb(num)
                },1000)
            }
        }
        // let fn=asyncFun(10);
        // fn(function(val){
        //   console.log(val);
        // });

        //处理generator函数
        function run(generator){
            let obj=generator();
            console.log('obj',obj);

            //执行第一次
            let res=obj.next();
            console.log('res',res); //{value:f(){};done:false;} value是asyncFun函数return出来的函数

            //递归调用判断done是否为true执行完毕
            function step(){
                //判断res.done是否为true,是就执行完毕,不是就继续递归调用step函数迭代
                if(!res.done){
                    
                    //判断value的值是否为函数
                    if(typeof res.value=='function'){
                        res.value(function(val){
                            console.log(val);
                            res=obj.next(val);
                            console.log(res);
                            step();
                        })
                    }
                   
                }
            }
            step();
        }

        run(
            //生成一个生成器,传入到run函数generator
            function *(){
                let res=yield asyncFun(10);
                res=yield asyncFun(res+10);
                res=yield asyncFun(res+10);
                console.log(res);
            }
        )

在这里插入图片描述

处理ajax请求
结合promise处理异步程序
CodeGenerator mybatis根据数据库 自动生成xml,mapper,dao,service 立即下载

相关推荐

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

Generator函数

1、什么是 Generator 函数 在Javascript中,一个函数一旦开始执行,就会运行到最后或遇到return时结束,运行期间不会有其它代码能够打断它,也不能从外部再传入值到函数体内 而Generator函数(生成器)的出现使得打破函数的完整运行成为了可能,其语法行为与传统函数完全不同 Generator函数是ES6提供的一种异步编程解决方案,形式上也是一个普通函数,但有几个显著的特征: function关键字与函数名之间有一个星号 “*” (推荐紧挨着function关键字) 函数体内使用 yi

qq_43239667的博客 1万+

避开地图定位偏差!手把手教你用Python实现火星坐标与WGS84精准转换

本文深入解析了国内地图服务中火星坐标(GCJ-02)与国际标准WGS84坐标系之间的偏差问题,并提供了基于Python的精准转换解决方案。文章详细阐述了坐标转换的核心原理,手把手教你构建可复用的转换工具包,并演示如何将其集成到实际应用(如Flask API)中,帮助开发者和数据分析师有效解决地图定位不准、多源数据无法对齐的痛点,提升地理信息处理能力。

weixin_29250403的博客 125

es6中的generator函数详解

generator函数 1.generator是什么: generator是一个迭代生成器,其返回值为迭代器(lterator),是ES6标准引入的新的数据类型,它借鉴于Python中的generator概念和语法; 迭代器协议: 定义了一种标准的方式来产生一个有限或无限序列的值; 当一个对象被认为是一个迭代器时,它实现了一个 next() 的方法,next()返回值如下: { done:tr...

田兴的博客 5903

【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解

IIC通信以两根连线SDA、SCL实现了完善的全双工同步数据传送, 可以方便地构成多机系统和外围器件扩展系统。

Jie_MSD的博客 2万+

脑电数据预处理十四:主成分分析(PCA)用于伪迹去除与降维

本文探讨了主成分分析(PCA)在脑电图(EEG)预处理中的双重应用。针对EEG数据的高维特性和伪迹干扰问题,PCA既可有效去除高振幅伪迹(如眼动、心电等),又能实现数据降维。文章详细解析了PCA的核心原理,包括正交基向量投影和方差最大保留机制,并提供了基于MNE-Python的完整实现方案。通过代码示例展示了PCA在伪迹去除和降维中的具体应用效果,包括功率谱密度和时域波形的可视化对比。虽然ICA在复杂伪迹处理上更具优势,但PCA以其算法简单、计算高效的特点,成为EEG分析流程中不可或缺的基础工具。

qq_32516809的博客 1417

python yield generator 详解

  本文将由浅入深详细介绍yield以及generator,包括以下内容:什么generator,生成generator的方法,generator的特点,generator基础及高级应用场景,generator使用中的注意事项。本文不包括enhanced generator即pep342相关内容,这部分内容在之后的博文介绍。 generator基础   在python的函数(function)...

weixin_34239592的博客 1413

卡诺图化简法

目录 1.学前需要了解知识点 2.卡诺图(karnaugh map) 3.逻辑函数的卡诺图化简法 4.总结 1.学前需要了解知识点 最小项的定义 最小项的表示方法 最小项的相邻性 最小项的定义:一个函数的某个乘积项包含了函数的全部变量,其中每个变量都以原变量或反变量的形式出现,且仅出现一次,则这个乘积项称为该函数的一个标准积项,通常称为最小项。 最小项的表示方法:通常用来表...

hahasusu的专栏 17万+

ES6 Generator生成器——同步异步生成器

Generator函数通过yield和next()的协作,提供了一种灵活控制执行流程的机制。它在处理大型数据流、异步编程(需结合Promise或async/await)、状态机等场景中表现出色,是JavaScript中实现复杂控制逻辑的重要工具。嗯,我现在需要详细解释JavaScript中的AsyncGenerator。首先,根据我搜索到的资料,我应该从不同的来源整理信息,确保覆盖定义、构造、方法、使用示例以及与同步生成器的区别等方面。

警警的博客 1648

Java调用YOLOv26全解析:从ONNX模型部署到工业质检实战

本文分享了工业自动化领域使用Java调用YOLOv26进行零件缺陷检测的完整方案。通过YOLOv26s模型结合ONNX Runtime Java部署,误检率和漏检率显著降低(分别从12%降至2.1%,8%降至0.8%)。文章详细介绍了方案选型理由、环境配置避坑指南、ONNX模型导出步骤,以及Maven依赖配置(分CPU/GPU版本)。该方案直接在上位机Java环境中运行,避免了跨语言调用损耗,适合工业质检场景部署,提供了可复用的性能优化和多线程推理实现。

2601_94871597的博客 1107

(2)NPW(监控片)【中】---业务场景精讲

自己在日常工作当中,由于非产线人员出生,对NPW的知识一直一知半解,业务场景认识的不够透彻,做系统的时候很难理解甲方的NPW业务应用,特收集了不少关于NPW的一些业务场景,下面都是一些摘抄,大家关注我标红标粗的部分,

阿拉伯梳子的专栏 1586

Generator 函数

这里写目录标题基本概念 基本概念 执行 Generator 函数会返回一个遍历器对象,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。 Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”) function* helloWorldGenerator() { yiel

m0_46404694的博客 1080

3.摄像头组件- CVP (ISP)

本文介绍 车载摄像头组件-ISP

2401_83458819的博客 1617

简单的GENERATOR

PEP:  255题目:  简单的GENERATOR版本:  $修订本: 1.18 $作者:  Neil Schemenauer , Tim Peters , Magnus Lie Hetland 讨论区:  python-iterators@lists.sourceforge.net状态:  定型本类型:  标准轨迹要求:  234 完成时间:  18-May-2001Python版本号:

monkst的专栏 1709

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JavaScript系列——Generator

在生成器内部,可以通过yield 来返回每一个操作步骤需要返回的内容,然后调用实例的next 方法,返回对应步骤的返回值。,将next 封装到then会调用函数,这个细节可以使得主线程执行完任务,再去任务队列执行next,实现主线程不阻塞。,原因是因为如果直接调用next,那么主线程就会一直阻塞在这个函数内部,直到执行所有的generator步骤。在介绍异步的时候,介绍过使用 async + await的方式处理promise,代码可以更加有可读性,其实。上面的代码可以实现,间隔一秒打印1,2,3。

1337

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

generator函数详解

Generator 函数的定义 语法上,Generator 函数是一个状态机,封装了多个内部状态。 形式上,Generator是一个函数。不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示区别。 整个Generator函数就是一个封装的异步任务,或者说是异步任务的容器,异步操作需要暂停的地方,都用yield语句。 什么是Generator函数 function 关键字和函数之间有一个星号(*),且内部使用yield表达式,定义不同的内部状态。 调用Generator函数后,该函数并不执行

a11979的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python generator长度_Python Generator

清单 4. 第三个版本class Fab(object):def __init__(self, max):self.max = maxself.n, self.a, self.b = 0, 0, 1def __iter__(self):return selfdef next(self):if self.n < self.max:r = self.bself.a, self.b = self....

weixin_39618275的博客 688

js中Generator函数详解

如果说 Promise 是为了解决回调地狱的难题出现的,那么 Generator 就是为了解决异步问题而出现的。普通函数,如果调用它会立即执行完毕;Generator 函数,它可以暂停,不一定马上把函数体中的所有代码执行完毕,正是因为有这样的特性,它可以用来解决异步问题。定义一个 Generator 函数,定义的方式和定义一个普通函数是类似的,不同之处在于它在 function 和函数名之间有一个*号。Generator 函数返回是一个迭代器对象,需要通过 xx.next 方法来完成代码执行。

月光晒了很凉快的博客 7013

mybatis generator 修改

修改目标 mybatis配置spring使用时, 原生的generator 不能满足需求 , 生成后需要修改代码, 增加和删除字段会比较烦琐, 因此需要对generator进行修改, 达到一键生成的效果. 去除烦人的注释, 只显示数据库中的注释 Mapper类增加@Mapper注解 实体类继承基类,并且不覆盖基类中的成员(比如id) 实体类增加序列化字段serialVersionUID 下载源...

奋斗 1587

js中generator的详解

对于普通函数而言,它会立即执行,而Generator 函数特性是可以停下,不会立即执行,正是这样的特性,它能很好处理异步问题。定义一个 Generator 函数和定义一个普通函数是类似的,不同之处在于它在 function 和函数名之间有一个*号。Generator 函数返回是一个迭代器对象,需要通过 xxx.next 方法来完成执行。// 定义迭代器对象iterator.next() // 执行这一局代码,1才会被打印。

caixin185的博客 1438

generator 中 调用另一个 generator

(1)for…of循环可以自动遍历 Generator 函数运行时生成的Iterator对象 function doAutomaticTraversal () { let arry = [] function* foo () { yield 1 yield 2 yield 3 yield 4 yield 5 return 6 } fo...

马优晨 517

co与generator

co与generator众所周知,js的的异步操作,基本的是引入回调机制。但是,回调机制容易产生的一个问题是回调金字塔 回调金字塔是js以前编程语法的上的一个诟病,也是异常处理中很麻烦的一件事情。 因此,人们希望能引入一些模式,来用同步编程代替异步编程,ES6之前的promise模式就是如此,而ES6后 ,co与与generator也实现了更简洁,更简单的异步代替同步的逻辑。 generat

zhiweiusetc的专栏 1776

关于mybatis generator生成中文注释

1、创建MyCommentGenerator类实现CommentGenerator接口 package gengrator; import org.mybatis.generator.api.CommentGenerator; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.a...

baidu_41573665的博客 1227
上一篇: promise
下一篇: 定时器js
*初级小白*~
博客等级 码龄7年 24粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值