【发布时间】:2015-08-08 20:57:52
【问题描述】:
我需要运行生成器异步(我需要在控制台 1、2、3、4、5 中得到结果,因为现在我有 4、1、2、3、5)有人可以帮助我吗?我需要运行任务并等待上一个任务完成后再运行下一个任务。我需要使用(如果可能:仅)生成器(或生成器 + 承诺?)
这是我的代码
/*jshint esnext: true */
function show(msg) {
var _msg = msg;
setTimeout(function() { console.log(_msg);}, 2000);
}
function show2(msg) {
console.log(msg);
}
var stack = [];
// add some function to stack
stack.push(function() { show(1); });
stack.push(function() { show(2); });
stack.push(function() { show(3); });
stack.push(function() { show2(4); });
stack.push(function() { show(5); });
function* generator1() {
for(var key of stack) {
yield key();
}
}
var gen = generator1();
gen.next();
gen.next();
gen.next();
gen.next();
gen.next();
【问题讨论】:
-
首先尝试编写一个没有生成器的解决方案(仅使用回调或承诺)。然后我们可能会向您展示如何在该图中合并生成器 - 因为生成器本身并不是异步的。
标签: javascript generator ecmascript-6