function aggregateIterator(factories, initialValues) {
console.log({aggregateIterator:{factories, initialValues} });
var curValues = Object.assign({}, initialValues);
var curPromise = Promise.resolve(curValues);
var curResolve = () => 0;
async function* g() {
yield curValues;
while (true) {
let p = curPromise;
var x = await p;
yield x;
}
}
async function startLoop(key) {
let iterator = factories[key].make();
async function get() {
let tokenPromise = iterator.next();
console.log({iterator, tokenPromise });
let token = await tokenPromise;
let valuePromise = token.value;
let value = await valuePromise;
console.log({iterator, tokenPromise, token, valuePromise, value});
return value;
}
var y = await get();
console.log({y});
curValues[key] = y;
var debugCount = 0;
while(true) {
let value = await get();
if (value!=curValues[key]) {
curValues[key] = value;
var oldResolve = curResolve;
curPromise = new Promise(function(resolve) {
curResolve = resolve;
});
oldResolve(curValues);
}
}
}
for(var k in factories)
startLoop(k);
var mainIterator = g();
return mainIterator;
}