Кто-нибудь пытался заставить 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
с генераторами. - person Felix Kling   schedule 26.07.2014forEach
вы можете просто использоватьfor (var e of arr) { yield doSomethingWith(e); }
или обычный циклfor
. Для других методов, таких какfilter
илиreduce
, я не вижу, как использование генератора может быть вообще полезным. Обратный вызовfilter
должен возвращать логическое значение. Как именно использование генератора имеет смысл здесь? - person Felix Kling   schedule 26.07.2014Promise.all
запустил бы запросы fs параллельно, в то время как решение генератора, которое вы, кажется, ищете, было бы последовательным. - person Bergi   schedule 26.07.2014