博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js-ES6学习笔记-Generator函数的应用
阅读量:5099 次
发布时间:2019-06-13

本文共 1667 字,大约阅读时间需要 5 分钟。

1、异步操作的同步化表达

Generator函数的暂停执行的效果,意味着可以把异步操作写在yield语句里面,等到调用next方法时再往后执行。这实际上等同于不需要写回调函数了,因为异步操作的后续操作可以放在yield语句下面,反正要等到调用next方法时再执行。所以,Generator函数的一个重要实际意义就是用来处理异步操作,改写回调函数。

function* loadUI() {  showLoadingScreen();  yield loadUIDataAsynchronously();  hideLoadingScreen();}var loader = loadUI();// 加载UIloader.next()// 卸载UIloader.next()

2、控制流管理

如果有一个多步操作非常耗时,采用回调函数,可能会写成下面这样。

step1(function (value1) {  step2(value1, function(value2) {    step3(value2, function(value3) {      step4(value3, function(value4) {        // Do something with value4      });    });  });});

采用Promise改写上面的代码。

Promise.resolve(step1)  .then(step2)  .then(step3)  .then(step4)  .then(function (value4) {    // Do something with value4  }, function (error) {    // Handle any error from step1 through step4  })  .done();

上面代码已经把回调函数,改成了直线执行的形式,但是加入了大量Promise的语法。Generator函数可以进一步改善代码运行流程。

function* longRunningTask(value1) {  try {    var value2 = yield step1(value1);    var value3 = yield step2(value2);    var value4 = yield step3(value3);    var value5 = yield step4(value4);    // Do something with value4  } catch (e) {    // Handle any error from step1 through step4  }}

3、部署Iterator接口

利用Generator函数,可以在任意对象上部署Iterator接口。

function* iterEntries(obj) {  let keys = Object.keys(obj);  for (let i=0; i < keys.length; i++) {    let key = keys[i];    yield [key, obj[key]];  }}let myObj = { foo: 3, bar: 7 };for (let [key, value] of iterEntries(myObj)) {  console.log(key, value);}// foo 3// bar 7

4、作为数据结构

Generator可以看作是数据结构,更确切地说,可以看作是一个数组结构,因为Generator函数可以返回一系列的值,这意味着它可以对任意表达式,提供类似数组的接口。

来自http://es6.ruanyifeng.com/#docs/generator#应用

转载于:https://www.cnblogs.com/zczhangcui/p/6516981.html

你可能感兴趣的文章
201571030323/201571030334《小学生四则运算练习软件需求说明》结对项目报告
查看>>
SequenceFile介绍
查看>>
安卓 代码混淆与打包
查看>>
AT&T汇编语言及其寻址方式
查看>>
ubuntu下 java、mysql、tomcat(ssl认证) 配置
查看>>
linux命名详解及其软件安装实例
查看>>
查看iOS沙盒(SanBox)文件
查看>>
数据结构与算法
查看>>
顺时针打印矩阵
查看>>
[转载]Chrome 与 Chrome OS 各版本下载集合
查看>>
面试微软前必须要读的十本书
查看>>
JqGrid学习
查看>>
《你的灯亮着吗?发现问题的真正所在》——读书笔记
查看>>
Intel MKL(Math Kernel Library)
查看>>
51Nod 1127 最短的包含字符串 滑窗算法
查看>>
hdu4057 Rescue the Rabbit
查看>>
EhReport ,CReport改进版本,再次改进 ,V1.31
查看>>
『ORACLE』 清理监听日志(11g)
查看>>
来自于一个问题的回答对自己的反思 php怎么发送邮件?发送邮件插件PHPMailer
查看>>
找的网上的js日期格式化问题出错了显示 一堆 NaN的东西
查看>>