Published
Edited
May 1, 2021
Fork of my utils
3 forks
Importers
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
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(); // is an async iterator
console.log({iterator, tokenPromise });
let token = await tokenPromise; // token = {done:..., value:...}
let valuePromise = token.value; // my value is a Promise
let value = await valuePromise;
console.log({iterator, tokenPromise, token, valuePromise, value});
return value;
}
var y = await get();
console.log({y});
curValues[key] = y;
//console.log({ key, curValues });
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;
}

Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more