fix: avoid waterfall-warning when async resolves to same value (#18297)

pull/18302/head
Simon H 2 months ago committed by GitHub
parent 070a0c4f77
commit c01e598fff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: avoid waterfall-warning when async resolves to same value

@ -230,9 +230,7 @@ export function async_derived(fn, label, location) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
if (DEV && location !== undefined) {
if (DEV && location !== undefined && !signal.equals(value)) {
recent_async_deriveds.add(signal);
setTimeout(() => {
@ -242,6 +240,8 @@ export function async_derived(fn, label, location) {
}
});
}
internal_set(signal, value);
}
batch.deactivate();

@ -0,0 +1,19 @@
import { tick } from 'svelte';
import { test } from '../../test';
export default test({
compileOptions: { dev: true },
async test({ assert, target, warnings }) {
await tick();
const [button] = target.querySelectorAll('button');
button.click();
await tick();
assert.htmlEqual(target.innerHTML, '<button>1</button>');
button.click();
await tick();
assert.htmlEqual(target.innerHTML, '<button>1</button>');
assert.deepEqual(warnings, []);
}
});

@ -0,0 +1,12 @@
<script>
let count = $state(0);
let unreactive = $derived(await push(count));
function push(v) {
if (!v) return v;
return Promise.resolve(1);
}
</script>
<button onclick={() => count++}>{unreactive}</button>
Loading…
Cancel
Save