waterfall detection

aa-coordination
Rich Harris 8 months ago
parent 51e50ecb3f
commit 5969b0919c

@ -22,6 +22,7 @@ import {
} from '../runtime.js';
import { equals, safe_equals } from './equality.js';
import * as e from '../errors.js';
import * as w from '../warnings.js';
import { block, destroy_effect } from './effects.js';
import { inspect_effects, internal_set, set_inspect_effects, source } from './sources.js';
import { get_stack } from '../dev/tracing.js';
@ -37,6 +38,8 @@ export function set_from_async_derived(v) {
from_async_derived = v;
}
export const recent_async_deriveds = new Set();
/**
* @template V
* @param {() => V} fn
@ -117,6 +120,17 @@ export function async_derived(fn) {
from_async_derived = null;
internal_set(value, v);
if (DEV) {
recent_async_deriveds.add(value);
setTimeout(() => {
if (recent_async_deriveds.has(value)) {
w.await_waterfall();
recent_async_deriveds.delete(value);
}
});
}
}
} catch (e) {
handle_error(e, parent, null, parent.ctx);

@ -38,6 +38,7 @@ import {
destroy_derived_effects,
execute_derived,
from_async_derived,
recent_async_deriveds,
update_derived
} from './reactivity/deriveds.js';
import * as e from './errors.js';
@ -1064,6 +1065,8 @@ export function get(signal) {
entry.read.push(get_stack('TracedAt'));
}
}
recent_async_deriveds.delete(signal);
}
return signal.v;

Loading…
Cancel
Save