javascript - 关于你不知道的js中生成器函数并发的问题

查看:59
本文介绍了javascript - 关于你不知道的js中生成器函数并发的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我在书上看见这样的代码,代码的目的是同时发起2个异步的ajax请求,把结果按照顺序push进一个数组中

//假设request是基于primose的ajax工具
var arr = [];
function *reqData ( url ) {
    var data = yield request(url);
    yield;    //关于这一行书上是这样解释的,控制转移
    arr.push(data);
}
var it1 = reqData("http:....1"), it2 = reqData("http:....2");    //总之是2个不同的url地址
var p1 = it1.next(), p2 = it2.next();
p1.then( function(data) {
    it1.next(data);
} );
p2.then( function(data) {
    it2.next(data);
} );
Promise.all([p1, p2]).then( function () {
    it1.next();
    it2.next();
} );

我一直没弄懂控制转移是干什么用的,书上也没多说

var arr = [];
function *reqData ( url ) {
    arr.push( yield  request(url) );
};
var it1 = reqData("http:....1"), it2 = reqData("http:....2");    //总之是2个不同的url地址
var p1 = it1.next(), p2 = it2.next();
Promise.all([p1, p2]).then( data => {
    var [data1, data2] = data;
    it1.next(data1);
    it2.next(data2);
});

这是我简化的代码,去掉了控制转移,这样做相比原来会有什么隐患呢

解决方案

个人觉得书上的代码之所以这么啰嗦,只是为了保证得到data数组的顺序。
相反,你简化的代码很优雅啊,简单干净利索。。。

这篇关于javascript - 关于你不知道的js中生成器函数并发的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆