ES6之生成器

news/2024/7/10 1:10:37 标签: es6, javascript, 前端, vue

文章目录

  • 前言
  • 一、生成器是什么?
  • 二、生成器
  • 总结


前言

生成器


一、生成器是什么?

生成器就是一个特殊的函数,实现异步编程。格式function *名称(){...}
(这个*靠近function写,靠近名称写,或者两边空格都不靠近均正确)

二、生成器

  1. 生成器函数声明比较特殊:特殊在声明用*,而且该函数有iterator实现接口,是迭代器对象
javascript"><!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function* dr() {
            console.log("a");
        }
        let iterator = dr();
        console.log(iterator);
    </script>
</body>

</html>

在这里插入图片描述

  1. 生成器执行用next
javascript">        function* dr() {
            console.log("a");
            console.log("b");
        }
        let iterator = dr();
        iterator.next();

在这里插入图片描述

  1. 生成器函数执行后的返回对象
    既然上面说它是迭代器对象,它调用next的工作原理跟迭代器的相似:next每调用一次,指针就往后移动一位;返回的是包含value,done属性的对象。
    只不过它的next移动只有函数里设置yield时,才会实现next分层执行(可以理解为yield是函数代码分隔符,下面的代码:yield “111”,yield "222"把代码分成三部分,第一部分是yield "111"及上面,第二部分是yield "111"与yield “222"之间包括yield"222”,第三部分是yield "222"下面)。
    否则默认全部为一次执行(即上面的图片执行结果)
    (如果对迭代器不熟的,可以看我上篇文章)
    next的返回结果的value是yield的值
    next调用时,就是每调用一次运行上面所说的分成的部分
javascript">	function* dr() {
            console.log("a");
            yield "111";
            console.log("b");
            yield "222";
            console.log("c");
        }
        let iterator = dr();
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());

在这里插入图片描述

  1. 生成器传参(生成器函数传参和next传参)
    注意:next传参是改变上一个yield … 的返回结果
javascript">	function* dr(arg) {
            console.log(arg);
            let one = yield "111";
            console.log(one);
            yield "222";
            console.log("c");
        }
        let iterator = dr("aaa");
        console.log(iterator.next());
        console.log(iterator.next("bbb"));
        console.log(iterator.next());

在这里插入图片描述

  1. 实例
    模拟:1s后获取用户数据,2s后获取订单信息,3s后获取商品信息
javascript">		<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function getUsers() {
            setTimeout(() => {
                let data = "用户数据";
                iterator.next(data);
            }, 1000)
        }

        function getOrders() {
            setTimeout(() => {
                let data = "订单信息";
                iterator.next(data);
            }, 2000)
        }

        function getGoods() {
            setTimeout(() => {
                let data = "商品数据";
                iterator.next(data);
            }, 3000)
        }

        function* dr() {
            let user = yield getUsers();
            console.log(user);
            let order = yield getOrders();
            console.log(order);
            let good = yield getGoods();
            console.log(good);
        }
        let iterator = dr();
        iterator.next();
    </script>
</body>

</html>

在这里插入图片描述


总结

以上就是生成器的介绍,希望对大家有所帮助。


http://www.niftyadmin.cn/n/342464.html

相关文章

C++/PTA 神坛

C/PTA 神坛 题目要求解题前提及思路凹包算法概念步骤 解题思路 代码tan(y/x)及tan2(y,x)函数 总结 题目要求 在古老的迈瑞城&#xff0c;巍然屹立着 n 块神石。长老们商议&#xff0c;选取 3 块神石围成一个神坛。因为神坛的能量强度与它的面积成反比&#xff0c;因此神坛的面…

oracle 闪回恢复

oracle 闪回恢复 闪回恢复区主要通过3个初始化参数来设置和管理&#xff1a; db_recovery_file_dest&#xff1a;指定闪回恢复区的位置 db_recovery_file_dest_size&#xff1a;指定闪回恢复区的可用空间大小 db_flashback_retention_target&#xff1a;指定数据库可以回退的时…

Ajax发送get请求和post请求的比较

回顾之前写代码时遇到的疑问 目录 代码案例 使用Ajax发送get请求案例&#xff1a; 使用Ajax发送post请求案例&#xff1a; 为什么在Ajax中需要为post请求设置响应头&#xff0c;而get请求不需要 为什么在Ajax中需要为post请求设置响应头&#xff0c;从底层是实现原理角度告…

HCIA-VRP系统

目录 一&#xff0c;什么是VRP VRP提供的功能&#xff1a; VRP文件系统&#xff1a; VRP存储设备&#xff1a; 设备初始化过程&#xff1a; 设备管理方式&#xff1a; 1&#xff0c;Web界面&#xff1a;可视化操作&#xff0c;通过http和https登录&#xff08;192.168.1.…

高效研发团队都在看!一套方法论带你找到适合自己的效能提升路径

近日&#xff0c;ONES 受邀参加 2023 QECon 全球软件质量&效能大会&#xff08;深圳站&#xff09;。在会上&#xff0c;ONES 研发效能改进咨询顾问陈仪&#xff0c;发表了主题为《如何为研发团队打造专属的效能提升路径》的演讲。 陈仪有着丰富的咨询经验&#xff0c;曾带…

跨时钟域数据同步

跨时钟信号直接传输在信号跳变时违背本地时钟域的时序要求&#xff08;建立时间约束&#xff0c;保持时间约束&#xff09;&#xff0c;容易产生亚稳态&#xff0c;无法确定亚稳态何时结束以及结束时保持在何种状态上。 用同步器抑制亚稳态的往下传播的概率&#xff0c;根据情…

身份证号和手机号的正则表达式

1. 身份证号正则表达式如下&#xff1a; /^([1-9]\d{5})(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/这个正则表达式可以匹配到18位身份证号码&#xff0c;其中&#xff1a; 前6位是地区码&#xff0c;第1位不能为0&#xff1b;接下来的4位是年…

双模齐下,提质增效:CODING 携手知微共创 BizDevOps 体系新篇章

为了提升工作和管理效率&#xff0c;工具建设是许多企业不得不面对的现实&#xff0c;然而在工具建设落地过程中&#xff0c;往往存在一系列的问题。如不同组织、部门之间互不相通&#xff0c;各自为政&#xff0c;工具流程与实际工作所需不符&#xff0c;导致工具建设的结果是…