Public
Edited
May 26, 2021
10 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
genMerge1 = promises =>
Generators.queue(change => promises.forEach(p => p.then(change)))
Insert cell
Insert cell
Insert cell
genMerge2 = async function*(promises) {
let nb = promises.length
for await (const res of genMerge1(promises)) {
yield res
if (!--nb) break
}
}
Insert cell
Insert cell
Insert cell
genMerge3 = async function*(promises) {
const map = new Map(promises.map((p, i) => [i, p.then(res => [i, res])]));
while (map.size) {
const [key, result] = await Promise.race(map.values());
yield result;
map.delete(key);
}
}
Insert cell
Insert cell
Insert cell
promises = () =>
[...Array(100)].map((_, i) => Promises.delay(Math.random() * 10000, i))
Insert cell
genMerge1(promises())
Insert cell
genMerge2(promises())
Insert cell
genMerge3(promises())
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