文档章节

yield用法分析

魂祭心
 魂祭心
发布于 2016/10/25 17:43
字数 300
阅读 17
收藏 0

yield主要用于在generator暂时挂起当前执行函数,如果返回callback对象,则可以实现多个callback的顺序执行。

这里具体的分析一下yield函数中每一步的执行过程

function *foo() {
    console.log(yield 1);
    console.log(yield 2);
    console.log(yield 3);
    console.log(yield 4);
    console.log(yield 5);
}

var it = foo();

console.log( it.next("xxx") ); 
console.log( it.next(111) ); 
console.log( it.next(222) );
console.log( it.next(333) );
console.log( it.next(444) );
console.log( it.next(555) );

从这段代码中看。

it.next第一次调用的时候,next会先传入一个“xxx”, 因为不存在一个接受的地方,所以不起作用,并在运行到yield 1的时候停止 到返回一个对象{ value: 1, done: false }。

当第二次调用next的时候没传入参数111到yield 1的位置,继续往下执行到yield 2的时候停止,返回一个{ value: 2, done: false }.......。所以最后的输出是

{ value: 1, done: false }
111
xxxxxx
{ value: 2, done: false }
222
{ value: 3, done: false }
333
{ value: 4, done: false }
444
{ value: 5, done: false }
555
{ value: undefined, done: true }

整个过程可以画成下面这张图

 

© 著作权归作者所有

上一篇: Curry的js实现
下一篇: c# 参数约束原理
魂祭心
粉丝 13
博文 53
码字总数 88077
作品 0
浦东
后端工程师
私信 提问
JS函数生成器,function* () {}

入门   简单来说,用法如下:   1、函数生成器特点是函数名前面有一个‘*’   2、通过调用函数生成一个控制器   3、调用next()方法开始执行函数   4、遇到yield函数将暂停   5、...

飞翔的熊blabla
2018/12/21
0
0
C#中yield return用法分析

有yield 关键字的函数,是当main函数请求一次,返回一次。没有yield关键字,迭代完所有的结果后,一起返回。 参考链接: http://www.jb51.net/article/54810.htm 本文转自daniel8294 51CTO博...

技术小胖子
2017/11/07
0
0
JAVA多线程08-基础篇-线程让步yield()

本节摘要:yield()功能介绍,yield()用法示例 一、功能介绍 让当前线程(调用yield()方法的线程)休息一会,即让当前线程由运行状态(Running)进入到可运行状态(Runnable),yield()方法在...

x_coder
2017/10/26
0
0
tornado.gen.coroutine-协程

yield的基本概念 2. Future的用法 3. ioloop的常用接口 4. gen.coroutine的应用 5. gen.coroutine的源码 6. Runner类的实现 1. yield的基本概念 python中使用yield实现了生成器函数,同样yie...

Thinking--
2015/03/04
408
0
ES6 中的 三种异步解决方案

部分案例来自 阮一峰 的ES6 教程 前置知识准备 Generator 函数 执行会返回一个迭代器(Iterator), 在迭代器上可以调用 next() 方法, 执行下一个 yield 或 return 调用 next() 方法,会返回一个...

小西在深圳
2018/06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.2K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部