我正在用babel的帮助试验ES6生成器,并且我很难理解如何(或者如果!)我可以有效地使用基于回调的异步函数来输出迭代器。ES6生成器:将回调转换为迭代器
比方说,我希望能够编写一个函数,它需要一些url,异步地下载它们并在它们被下载后立即返回。 我希望能够写出像下面这样:
let urls = ['http://www.google.com', 'http://www.stackoverflow.com' ];
for ({url, data} of downloadUrls(urls)) {
console.log("Content of url", url, "is");
console.log(data);
}
我怎样才能实现downloadUrls
? 理想我想能写:
var downloadUrls = function*(urls) {
for(let url of urls) {
$.ajax(url).done(function(data) {
yield data;
});
}
};
这当然是不行的,因为``产量'被调用的回调中,而不是直接在发生器内。 我可以在网上找到很多试用相同的例子,它们是not much transparent),需要enabling browser/node flags,或者使用节点特定的功能/库。 最接近我需要的库似乎是task.js,但我无法在当前的Chrome上运行最简单的示例。
有没有一种方法可以使用标准和当前功能获得预期的行为,(目前我的意思是可用于像babel这样的转译器,但不需要在浏览器上启用额外的标志)还是必须等待async/await
?
这些在线解释到底对您而言“不透明”究竟如何?大卫沃尔什文章是我读过的最好的文章之一(但你需要阅读整个课程系列) – Bergi
似乎相关:异步生成器提议https://github.com/jhusain/asyncgenerator(不支持任何地方据我所知)。 –