ES6基础知识(Generator 函数应用)
2024-09-05 22:09:09
1.Ajax 是典型的异步操作,通过 Generator 函数部署 Ajax 操作,可以用同步的方式表达
function* main() {
var result = yield request("http://some.url");
var resp = JSON.parse(result);
console.log(resp.value);
} function request(url) {
makeAjaxCall(url, function(response){
it.next(response);
});
} var it = main();
it.next();
上面代码的main
函数,就是通过 Ajax 操作获取数据。可以看到,除了多了一个yield
,它几乎与同步操作的写法完全一样。注意,makeAjaxCall
函数中的next
方法,必须加上response
参数,因为yield
表达式,本身是没有值的,总是等于undefined
。
2.Generator 函数的一个重要实际意义就是用来处理异步操作,改写回调函数
function* loadUI() {
showLoadingScreen();
yield loadUIDataAsynchronously();
hideLoadingScreen();
}
var loader = loadUI();
// 加载UI
loader.next() // 卸载UI
loader.next()
上面代码中,第一次调用loadUI
函数时,该函数不会执行,仅返回一个遍历器。下一次对该遍历器调用next
方法,则会显示Loading
界面(showLoadingScreen
),并且异步加载数据(loadUIDataAsynchronously
)。等到数据加载完成,再一次使用next
方法,则会隐藏Loading
界面。可以看到,这种写法的好处是所有Loading
界面的逻辑,都被封装在一个函数,按部就班非常清晰。
3.利用 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
备注:文中多数内容摘自阮一峰老师文章,仅供自我学习查阅。
最新文章
- 【四】搭建Markdown的编辑器
- Android应用内存泄漏的定位、分析与解决策略
- String.Format格式说明——复制于DotNet笔记
- hadoop 分布式缓存
- URAL 2080 莫队
- W3cshool之JavaScript基础
- Android更新UI的两种方法——handler与runOnUiThread()
- (转载)python多行注释
- Swift中的延迟加载(懒加载)
- C/C++中的const int*和int * const
- django note
- 以太坊MetaMask钱包插件简介
- 20160214.CCPP体系详解(0024天)
- 一个字符带下滑线的EditText
- [ffmpeg] 滤波
- CAN总线相关的几个gitlab代码
- 启明星系统安装教程(如何在windows2012里配置IIS)
- 移动端动态font-size
- leetcode1004
- bzoj1242(弦图判定)
热门文章
- Keras函数——mode.fit_generator()
- kubelet源码分析——关闭Pod
- ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用
- 视频需求超平常数 10 倍,却节省了 60% 的 IT 成本投入是一种什么样的体验?
- 【死磕 NIO】— Reactor 模式就一定意味着高性能吗?
- 新手小白在github上部署一个项目
- 第五课第四周笔记4:Transformer Network变压器网络
- python的虚拟环境Anaconda使用
- Java:创建对象小记
- 大闸蟹的 O O 第三单元日子——中测与强测的惨烈修罗场