有人尝试过将Underscore JS或lodash(或任何ES5标准函数)与生成器一起使用吗?
如果我们有一个数组var myArray = [1,2,3,4,6];
,我们想要对它进行forEach操作。
在非生成器情况下,你可以简单地:
myArray.forEach(function(k) {
console.log(k);
});
然而,在非生成器函数内部,你无法使用yield,所以如果在此循环中必须执行一些异步工作,则需要执行以下操作。
var foreach = function* (arr, fn) {
var i;
for (i = 0; i < arr.length; i++) {
yield * fn(arr[i], i);
}
};
yield* foreach(myArray, function* (k) {
var a = yield fs.readFile();
});
有点糟糕。
有人知道如何使匿名函数与生成器一起工作吗?因为这个问题,我们失去了整个lodash库。
注:我正在使用Traceur将我的代码编译成启用生成器的ES6。
注:我没有使用co()。我正在使用下面看到的自定义生成器函数。
var run = function(generatorFunction) {
var generatorItr = generatorFunction(resume);
function resume(callbackValue) {
generatorItr.next(callbackValue);
}
generatorItr.next();
};
forEach
。 - Felix KlingforEach
,您可以使用for (var e of arr) { yield doSomethingWith(e); }
或普通的for
循环。对于其他方法如filter
或reduce
,我不认为使用生成器会有任何用处。filter
回调函数必须返回布尔值。在这种情况下,使用生成器会有什么意义呢? - Felix KlingPromise.all
将会并行地启动 fs 查询,而你似乎正在寻找的生成器解决方案将是顺序的。 - Bergi