JS的ES6的Generator

JS的ES6的Generator

1.Generator函数的概念:

  • ES6提供的解决异步编程的方案之一,现在已经不怎么用了被淘汰了。

  • Generator函数是一个状态机,内部封装了不同状态的数据。

  • 用来生成遍历器对象

  • 暂停函数,yield关键字暂停,next()方法启动,yield可以获得next方法传递过来的数据,如果无数据yield返回undefined,如果有数据则返回数据。

2.Generator使用:

1 function* generatorExample(){
2   let result = yield ‘hello‘;  // 状态值为hello
3   yield ‘generator‘; // 状态值为generator
4 }
  • function与函数名之间有一个星号

  • 内部用yield表达式来定义不同的状态

  • generator函数返回的是指针对象(iterator),而不会执行函数内部逻辑

  • 调用next方法函数内部逻辑开始执行,遇到yield表达式停止,返回{value: yield后的表达式结果/undefined, done: false/true}

  • 再次调用next方法会从上一次停止时的yield处开始,直到最后

  • yield语句返回结果通常为undefined, 当调用next方法时传参内容会作为启动时yield语句的返回值。

3.示例:

 1     var num = 1;
 2
 3     function AsyncUtil() {
 4       setTimeout(() => {
 5         console.log("异步任务" + num + "执行");
 6
 7         let data = "异步任务" + num + "的返回数据xxxx";
 8
 9         num++;
10         GU.next(data); //继续执行yield之后的语句
11       }, 2000);
12     }
13
14     function* generatorUtil() {
15       console.log("函数开始执行");
16
17       let result = yield AsyncUtil(); //遇到yield就暂停,执行异步任务,让异步任务调用generatorUtil继续执行。
18       console.log("异步任务执行成功,返回值:" + result);
19       console.log("函数继续执行");
20
21       result = yield AsyncUtil();
22       console.log("异步任务执行成功,返回值:" + result);
23
24       console.log("函数执行结束");
25
26     }
27
28     let GU = generatorUtil();
29     console.log(GU);
30
31     GU.next();  //只有个使用next方法才能调用执行

原文地址:https://www.cnblogs.com/zhihaospace/p/12055585.html

时间: 2024-10-08 01:32:15

JS的ES6的Generator的相关文章

深入解析js异步编程利器Generator

我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就会变得让人无法忍受了. 我们知道的Promises就是问了解决这个问题而提出来的.然而,promises并不是一种新的功能,它只是一种新的写法,原来横向发展的回调函数,被排成了队竖向发展. 然而,Generator不同,它是一种新的解决方案. 文章中提到的所有代码都可以在这里找到源码:[查看源码].

廖雪峰js教程笔记6 generator一个坑 看完python在回来填坑

generator(生成器)是ES6标准引入的新的数据类型.一个generator看上去像一个函数,但可以返回多次. ES6定义generator标准的哥们借鉴了Python的generator的概念和语法,如果你对Python的generator很熟悉,那么ES6的generator就是小菜一碟了.如果你对Python还不熟,赶快恶补Python教程!. 我们先复习函数的概念.一个函数是一段完整的代码,调用一个函数就是传入参数,然后返回结果: function foo(x) { return

JS的ES6

JS的ES6 1.let let age = 12; (1). 作用: 与var类似, 用于声明一个变量 (2). 特点: 在块作用域内有效 不能重复声明 不会预处理, 不存在提升 (3). 应用: 循环遍历加监听 使用let取代var是趋势 2.const const sex = '男'; (1). 作用: 定义一个常量 (2). 特点: 不能修改 其它特点同let (3). 应用: 保存不用改变的数据 3.解构赋值 (1)对象的解构赋值:从对象的属性中取到想要的属性值 1 let obj =

js的ES6特性

一. let和const关键字 let出现之前,js所有的作用域都是以函数为单位的,只要在一个function里声明的var, 无论是for循环等块里面声明的还是在块外面声明的,整个function都可以使用这个var,比如: function foo() { for (var i=0; i<100; i++) { // } i += 100; // 仍然可以引用变量i } 我个人的理解是js的提升特性,函数会将里面声明的所有var都提升到函数开始的地方,所以整个函数内都共享这些var. let

es6之Generator

1.Generator函数其实是一个封装了多个内部状态的状态机,执行它会返回一个遍历器对象,然后可以依次遍历Generator中的每一个状态,也就是分段执行,yield是暂停执行的标记,next恢复执行. 2.yield: - 一个函数里面,return只能执行一遍,yield可以执行多次: - Generator函数可以不用yield,这时就是一个简单的暂缓执行函数: - yield只能用在Generator函数里: - yield如果用在一个表达式里,必须放在圆括号里 function* f

Atitit js es5 es6新特性 attilax总结

1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 基本chrome ff 360se8全面支持了2 2. ECMAScript 2015(ES6)的十大特征 – WEB前端开发 - 专注前端开发,关注用户体验.html2 1.1. JavaScript发展时间轴: 1.1995:JavaScript诞生,它的初始名叫LiveScript. 2.1997:ECMAScript标准确立. 3.1999:ES3出

[Node.js] Testing ES6 Promises in Node.js using Mocha and Chai

Writing great ES6 style Promises for Node.js is only half the battle. Your great modules must include tests as well to ensure future iterations don't break them. In this lesson, I show you a simple ES6 Promise in Node.js, then walk you through creati

JS篇 ES6新特性

注意: 1. Node环境下,--harmony参数启用ES6新特性,许多新特性只有在strict mode下才生效,因此使用"use strict"或者--use_strict,否则harmony没有被启用: 1. 块级作用域(Block scope) // Block scope function f1(){ console.log("Outside."); } (function(){ if(false){ // f1定义在if {}之内 function f

es6,promise,generator,next,yield与koa

es6里有了很多新特性 promise是一种形式,使用promise可以让异步的代码像同步代码,从而更符合人类的思维方式,使回调函数的写法变得轻松 在函数中使用promise,一般是return一个用promise包裹的函数,如: 1 function t(arg){ 2 //准备工作,处理等 3 // ... 4 var istrue =arg+1 5 //处理结束 6 return new promise(function(resolve,reject{ 7 //判定并返回 8 if(ist