async-fork
Dominic Gannaway 7 months ago
parent a544f25fa2
commit 044475de01

@ -3,6 +3,7 @@
import { import {
BOUNDARY_EFFECT, BOUNDARY_EFFECT,
BOUNDARY_SUSPENDED, BOUNDARY_SUSPENDED,
DERIVED,
DIRTY, DIRTY,
EFFECT_PRESERVED, EFFECT_PRESERVED,
EFFECT_RAN, EFFECT_RAN,
@ -34,7 +35,7 @@ import { DEV } from 'esm-env';
import { from_async_derived, set_from_async_derived } from '../../reactivity/deriveds.js'; import { from_async_derived, set_from_async_derived } from '../../reactivity/deriveds.js';
import { raf } from '../../timing.js'; import { raf } from '../../timing.js';
import { loop } from '../../loop.js'; import { loop } from '../../loop.js';
import { mark_reactions } from '../../reactivity/sources.js'; import { internal_set, mark_reactions } from '../../reactivity/sources.js';
const ASYNC_INCREMENT = Symbol(); const ASYNC_INCREMENT = Symbol();
const ASYNC_DECREMENT = Symbol(); const ASYNC_DECREMENT = Symbol();
@ -165,11 +166,18 @@ export function boundary(node, props, children) {
// @ts-ignore // @ts-ignore
var forks = boundary.fn.forks; var forks = boundary.fn.forks;
for (var [signal, entry] of forks) { for (var [signal, entry] of forks) {
if (signal.v !== entry.v) { if (signal.v !== entry.v) {
if ((signal.f & DERIVED) === 0) {
var val = signal.v;
signal.v = entry.v;
internal_set(signal, val);
} else {
mark_reactions(signal, DIRTY); mark_reactions(signal, DIRTY);
} }
} }
}
forks.clear(); forks.clear();
for (const fn of callbacks) fn(); for (const fn of callbacks) fn();

@ -32,7 +32,11 @@ export default test({
await Promise.resolve(); await Promise.resolve();
await Promise.resolve(); await Promise.resolve();
await Promise.resolve(); await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await tick(); await tick();
flushSync();
assert.htmlEqual(target.innerHTML, '<p>84</p>'); assert.htmlEqual(target.innerHTML, '<p>84</p>');
d = deferred(); d = deferred();

Loading…
Cancel
Save