Public
Edited
Jan 5, 2023
Insert cell
Insert cell
players = ({})
Insert cell
queue = []
Insert cell
{
players.knocker = knocker();
players.asker = asker();
send("asker", "asker get ready..."); // call first .next()
send("knocker", "knocker go!"); // start the conversation
run();
}
Insert cell
send = (name, msg) => {
console.log(msg);
queue.push([name, msg]);
}
Insert cell
run = () => {
while (queue.length) {
let [name, msg] = queue.shift();
players[name].next(msg);
}
}
Insert cell
knocker = function* () {
send("asker", "knock knock");
let question = yield;
if (question !== "who's there?") return;
send("asker", "gene");
question = yield;
if (question !== "gene who?") return;
send("asker", "generator!");
}
Insert cell
asker = function* () {
let knock = yield;
if (knock !== "knock knock") return;
send("knocker", "who's there?");
let answer = yield;
send("knocker", `${answer} who?`);
}
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