JS Generator yield
function show() {
console.log('a')
console.log('b')
}
show() // 普通函数 function *show2() {
console.log('1')
yield
console.log('2')
}
let genObj = show2() //返回的是指针对象
genObj.next() // 1
genObj.next() // 2
genObj.next()
需要调用next()方法启动执行,需要遇到 yield 停
generator函数前面加一个 *
两边可以有空格,或靠近函数或function
如果函数前漏掉 *
- 就是普通函数
- 如果有
yield
会报错,ReferenceError: yield is not defined
- yield 只能在Generator函数内部使用
yield
- 既可传参,又可以返回
- 第一个
next()
传参无效,只用来启动
给yield穿参数
function * show() {
console.log('1')
var a = yield
console.log('2')
console.log(a)
} var gen = show()
gen.next() // 1
gen.next() // 2 和 undefined var gen = show()
gen.next(10) // 1
gen.next(20) // 2 和 20
如果要给第一个yield前的语句传参,可以把参数加在函数里,但是这个参数是整个生成器共享,即第二个yield也可以拿到
function * show(p) {
console.log('1')
console.log(p)
var a = yield
console.log('2')
console.log(a)
console.log(p)
} var gen = show(10)
gen.next() // 1 和 10
gen.next(20) // 2 和 20 10
利用yield返回值
// yield 返回
function * show() {
console.log('1')
yield 10
console.log('2')
} var gen = show()
var res1 = gen.next()
console.log(res1) // { value: 10, done: false }
var res2 = gen.next()
console.log(res2) // { value: undefined, done: true }
如果要给最后一个yield执行后返回值,可以利用return
function * show() {
console.log('1')
yield 10
console.log('2')
return 20
}
// yield 返回
var gen = show()
var res1 = gen.next()
console.log(res1) // { value: 10, done: false }
var res2 = gen.next()
console.log(res2) // { value: 20, done: true }
JS Generator yield的更多相关文章
- Generator & yield write in sync way
Generator & yield write in sync way var p = new Promise(function(resolve, reject){ setTimeout(fu ...
- Generator yield语法和 co模块
Generator yield 语法使用,也叫生成器,实际上就是多个异步按顺序执行 1.下面是一个读取两个文件的例子 const fs = require('fs'); const readFile ...
- 异步编程的上下文与操作符--await/async generator/yield
上下文的保存机制: 1.保存到异步类型中:promise & future & closure & observable: 2.栈帧保存:其它保存机制: 3.保存到服务提供方的 ...
- ES Next & Arrow function & Promise & Iterator & Generator yield & Async Await
ES Next & Arrow function & Promise & Iterator & Generator yield & Async Await co ...
- js generator和yield
function co<T>(fn: () => Generator<any, any, any>): Promise<T> { const g: Gener ...
- JS generator(生成器)
笔记整理自:廖雪峰老师的JS教程 目录 简介 与函数的不同之处 函数写法 generator写法 generator调用 generator对象的`next()`方法调用 `for ... of`循环 ...
- js generator数据类型
1. 概述 generator 是ES6引入的新的数据类型, 看上去像一个函数,除了使用return返回, yield可以返回多次. generator 由function* 定义, (注意*号), ...
- 生成器(generator,yield),next,send
#生成器 def generator(): for i in range(200): yield '哇哈哈%s' %i g = generator() #调用生成数函数,接受作用 ret = g.__ ...
- js generator
generator(生成器)是ES6标准引入的新的数据类型.一个generator看上去像一个函数,但可以返回多次. generator跟函数很像,定义如下: function* foo(x) { y ...
随机推荐
- Brain的同步规则
这段话来自Java编程思想并发一章 什么时候使用同步 如果你正在写一个变量,它可能接下来将被另一个线程读取,或者正在读取一个上一次已经被另一个线程写过的变量,那么你必须使用同步,并且,读写线程都必须用 ...
- js中setTimeout和setInterval的应用方法(转)
JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延迟一段时间,再进行某项操作. setTimeout("function& ...
- IdentitiServser4 + Mysql实现Authorization Server
Identity Server 4官方文档:https://identityserver4.readthedocs.io/en/latest/ 新建2个asp.net core 项目使用空模板 Aut ...
- Linux下nouveau操作和GPU的操作,nouveau拯救
之前也提到了,旧机器上有一块NVIDIA的显卡,装了ubuntu16.04后一直没有安装驱动.这周算是有点时间,就差点作了死. 首先必须澄清,这个不是正确的安装过程,起码我就报了memory erro ...
- String,到底创建了多少个对象?
String str=new String("aaa"); <span style="font-size:14px;">String str=n ...
- KVM和Docker的对比
虚拟化技术对比: KVM:全虚拟化,需要模拟各种硬件 docker:严格来说不算是虚拟化技术,只是进程隔离和资源限制 实例启动进程对比: 在kvm虚拟机中执行top命令,看宿主机进程树,根本看不到to ...
- 小米Air安装Arch Linux之图形界面配置(Gnome 和 sway)持续更新中……
0. 前言 上一篇文章简单讲述了在小米Air上安装Arch Linux的经验,但是安装完后基本系统后,还需要额外的配置才能进到日常使用.下文简单列举一些步骤. 1. 参考网站 主要还是参考ARCH W ...
- jq常用方法
$().addClass(css中定义的样式类型); 给某个元素添加样式$().attr({src:”test.jpg”,alt:”test Image”}); 给 ...
- (转) Apache Shiro 使用手册(三)Shiro 授权
解惑之处: 使用冒号分隔的权限表达式是org.apache.shiro.authz.permission.WildcardPermission 默认支持的实现方式. 这里分别代表了 资源类型:操作:资 ...
- Single List Reversion
LeetCode 1. 基于头插法的迭代: public ListNode reverseList(ListNode head) { if(head == null) return null; Lis ...