es6 在迭代器中获取异步的值
2016-07-08 10:49
260 查看
由于迭代器在主线程中运行,所以我们普通
yield xxx // xxx属于一个异步操作,所以正常情况下下一个yield不同被上一个yield同步,
为了使下一个yield与上一个yield同步,我们必须把迭代器带入xxx的异步环境中,或者通过同步的方式做到,可能你还不知道我在说什么,下面我细说
![](https://img-blog.csdn.net/20160708104140610)
所以无法王成两个yield的同步操作,下面我们完成同步操作,就是把yield2的操作在子线程王成
![](https://img-blog.csdn.net/20160708104526066)
例子:
function Main2(fn){
const iter = fn();
const async = iter.next();
async.value.then((data) => {
iter.next(data);
});
}
const list = Main2(function *(){
// showLoadingScreen();
console.log('loading...');
let data;
const dd = yield asyncTask3(function(json){
data = json;
console.log('...', data);
});
console.log('finish...',dd);
return dd;
});
注意的是我们把整个迭代器带入子线程中了!!!!!!
loading...
main-list.js?0e37:180finish2...
main-list.js?0e37:145Object {value: Promise, done: false}
main-list.js?0e37:192parsed data undefined
main-list.js?0e37:175 ... [Object, Object, Object, Object, Object]
main-list.js?0e37:177finish... [Object, Object, Object, Object, Object]
main-list.js?0e37:109 parsed json [Object, Object, Object, Object, Object]
看看上面的三个log同步把!!!
yield xxx // xxx属于一个异步操作,所以正常情况下下一个yield不同被上一个yield同步,
为了使下一个yield与上一个yield同步,我们必须把迭代器带入xxx的异步环境中,或者通过同步的方式做到,可能你还不知道我在说什么,下面我细说
所以无法王成两个yield的同步操作,下面我们完成同步操作,就是把yield2的操作在子线程王成
例子:
function Main2(fn){
const iter = fn();
const async = iter.next();
async.value.then((data) => {
iter.next(data);
});
}
const list = Main2(function *(){
// showLoadingScreen();
console.log('loading...');
let data;
const dd = yield asyncTask3(function(json){
data = json;
console.log('...', data);
});
console.log('finish...',dd);
return dd;
});
注意的是我们把整个迭代器带入子线程中了!!!!!!
loading...
main-list.js?0e37:180finish2...
main-list.js?0e37:145Object {value: Promise, done: false}
main-list.js?0e37:192parsed data undefined
main-list.js?0e37:175 ... [Object, Object, Object, Object, Object]
main-list.js?0e37:177finish... [Object, Object, Object, Object, Object]
main-list.js?0e37:109 parsed json [Object, Object, Object, Object, Object]
看看上面的三个log同步把!!!
相关文章推荐
- 【C和指针】第八章(1)-->一维数组
- Android实现软件列表的点击启动另外一个程序功能【附demo源码下载】
- ckeckbox的全选
- 使用CMake进行android native开发
- Git使用本地仓库之基本操作
- openwrt 实现hotplug-button
- 大众点评ETL数据传输平台生产实践和测试
- oracle里实例和数据库之间的关系
- 四种聚类方法之比较
- 类别中定义对象有效性判断(nil、Nil、null、length等)
- 大量 Redis 服务器存在 SSH 权限窃取风险
- 流程控制:while/until循环
- 如何查看IIS并发连接数【转】
- 《设计模式》之Creational模式:Abstract Factory
- 图片滚动
- 【c++程序】this指针详解
- 使用javamail发送邮件
- codeforces 361D rmq st算法模板
- Java线程(1)
- [mt6735]预装APp