Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/runtime.js
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,13 @@ function variable_compute(variable) {

function variable_generate(variable, version, generator) {
const runtime = variable._module._runtime;
let currentValue; // so that yield resolves to the yielded value

// Retrieve the next value from the generator; if successful, invoke the
// specified callback. The returned promise resolves to the yielded value, or
// to undefined if the generator is done.
function compute(onfulfilled) {
return new Promise(resolve => resolve(generator.next())).then(({done, value}) => {
return new Promise(resolve => resolve(generator.next(currentValue))).then(({done, value}) => {
return done ? undefined : Promise.resolve(value).then(onfulfilled);
});
}
Expand All @@ -304,6 +305,7 @@ function variable_generate(variable, version, generator) {
function recompute() {
const promise = compute((value) => {
if (variable._version !== version) return;
currentValue = value;
postcompute(value, promise).then(() => runtime._precompute(recompute));
variable._fulfilled(value);
return value;
Expand All @@ -328,6 +330,7 @@ function variable_generate(variable, version, generator) {
// already established, so we only need to queue the next pull.
return compute((value) => {
if (variable._version !== version) return;
currentValue = value;
runtime._precompute(recompute);
return value;
});
Expand Down