pull/18825/merge
svelte-triage-bot[bot] 2 days ago committed by GitHub
commit 39922266d4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: preserve reaction context for synchronous async expression errors

@ -152,7 +152,8 @@ export function async_derived(fn, label, location) {
.finally(unset_context);
} catch (error) {
d.reject(error);
unset_context();
// Don't clear the reaction context before the current update has finished
queueMicrotask(unset_context);
}
if (DEV) {

@ -0,0 +1,18 @@
import { tick } from 'svelte';
import { test } from '../../test';
export default test({
mode: ['client'],
compileOptions: {
dev: false
},
async test({ assert, target }) {
await tick();
assert.htmlEqual(target.innerHTML, '<button>invalidate</button><p>ready</p>');
target.querySelector('button')?.click();
await tick();
assert.htmlEqual(target.innerHTML, '<button>invalidate</button><p>original error</p>');
}
});

@ -0,0 +1,17 @@
<script>
let valid = $state(true);
function load() {
if (!valid) throw new Error('original error');
return Promise.resolve('ready');
}
</script>
<button onclick={() => (valid = false)}>invalidate</button>
<svelte:boundary>
<p>{await load()}</p>
{#snippet pending()}<p>pending</p>{/snippet}
{#snippet failed(error)}<p>{error.message}</p>{/snippet}
</svelte:boundary>
Loading…
Cancel
Save