Как я должен изменить свой код на функцию генератора цепей, используя прокси ES6?
Последние пару дней я тратил много часов, чтобы заставить мой код работать, но я не могу заставить его работать!!
Я пытаюсь создать цепочку функций генератора, как показано ниже, с помощью прокси-сервера es6. Кажется, что я могу добавить эти функции операций со списками в прототип генератора, но я хочу использовать прокси вместо этого для моей учебной цели.
То, что я хочу достичь в конце
rangeGenerator
.map('project function here')
.filter('predicate function here')
.forEach('do some last work');
Может ли кто-нибудь взглянуть на мой код ниже и сказать, что я делаю не так и как это исправить, пожалуйста?
Спасибо!!
Мой код
function range(end) {
return function* rangeGf() {
for (let i = 1; i <= end; i++) {
yield i;
}
}
}
const makeHandler = (options) => {
const handler = {
get: function(target, property, resolver) {
if (property === 'map') {
return map.bind(target);
}
if (property === 'filter') {
return filter.bind(target);
}
}
};
function map(project) {
console.log('project', project);
const newTarget = this;
function* mapGf() {
for (let v of newTarget()) {
yield v * 2; //hard coding for now...
}
}
// return generator object wrapped by proxy
return new Proxy(mapGf(), handler);
}
function filter(predicate) {
console.log('predicate', predicate);
const newTarget = this;
function* filterGf() {
for (let v of newTarget) {
if(v % 3 === 0) { //hard coding for now...
yield v;
}
}
}
// return generator object wrapped by proxy
return new Proxy(filterGf(), handler);
}
return handler;
};
const rangeGf = range(10);
const $range = new Proxy(rangeGf, makeHandler())
// for now, I'm trying to make this simple one work!
for (var i of $range.map('project')) {
console.log(i)
}
Сейчас я хочу заставить эту часть работать
for (var i of $range.map('project')) {
console.log(i)
}