incremental-batches
Rich Harris 2 weeks ago
parent e11871867c
commit cfc16cae59

@ -1205,14 +1205,18 @@ export function eager(fn) {
return;
}
// the second time this effect runs, it's to schedule a
// `version` update. since this will recreate the effect,
// we don't need to evaluate the expression here
if (eager_versions.length === 0) {
queue_micro_task(eager_flush);
}
if (!current_batch?.is_fork) {
// the second time this effect runs, it's to schedule a
// `version` update. since this will recreate the effect,
// we don't need to evaluate the expression here
if (eager_versions.length === 0) {
queue_micro_task(eager_flush);
}
eager_versions.push(version);
eager_versions.push(version);
} else {
fn();
}
});
initial = false;
@ -1314,14 +1318,8 @@ export function fork(fn) {
}
for (var [value, wv] of batch.wvs) {
if (wv > value.wv) {
value.v = batch.current.get(value);
value.wv = increment_write_version();
if ((value.f & DERIVED) !== 0) {
/** @type {Derived} */ (value).cv = value.wv;
}
}
value.v = batch.current.get(value);
value.wv = wv;
}
// trigger any `$state.eager(...)` expressions with the new state.
@ -1381,7 +1379,10 @@ export function get_cv(reaction) {
export function set_cv(reaction, cv = write_version) {
current_batch?.cvs.set(reaction, cv);
batch_cvs?.set(reaction, cv);
reaction.cv = cv;
if (!current_batch?.is_fork) {
reaction.cv = cv;
}
}
/**

@ -39,7 +39,7 @@ import { get_error } from '../../shared/dev.js';
import { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';
import { component_context } from '../context.js';
import { UNINITIALIZED } from '../../../constants.js';
import { batch_values, batch_wvs, current_batch, set_cv } from './batch.js';
import { batch_values, batch_wvs, current_batch, get_wv, set_cv } from './batch.js';
import { increment_pending, unset_context } from './async.js';
import { deferred, includes, noop } from '../../shared/utils.js';
@ -388,7 +388,7 @@ export function execute_derived(derived) {
export function update_derived(derived) {
var value = execute_derived(derived);
set_cv(derived);
set_cv(derived, derived.deps === null ? Infinity : Math.max(...derived.deps.map(get_wv)));
if (!derived.equals(value)) {
batch_wvs?.set(derived, write_version);

Loading…
Cancel
Save