update test, remove unnecessary suspend

pull/16197/head
Rich Harris 7 months ago
parent b18cd46982
commit a5275b2405

@ -342,7 +342,6 @@ export function template_effect(fn, sync = [], async = [], d = derived) {
if (async.length > 0) { if (async.length > 0) {
var restore = capture(); var restore = capture();
var unsuspend = suspend();
Promise.all(async.map((expression) => async_derived(expression))).then((result) => { Promise.all(async.map((expression) => async_derived(expression))).then((result) => {
restore(); restore();
@ -352,8 +351,6 @@ export function template_effect(fn, sync = [], async = [], d = derived) {
} }
create_template_effect(fn, [...sync.map(d), ...result]); create_template_effect(fn, [...sync.map(d), ...result]);
unsuspend();
}); });
} else { } else {
create_template_effect(fn, sync.map(d)); create_template_effect(fn, sync.map(d));

@ -1,37 +1,33 @@
import { flushSync, tick } from 'svelte'; import { flushSync, tick } from 'svelte';
import { deferred } from '../../../../src/internal/shared/utils.js';
import { test } from '../../test'; import { test } from '../../test';
/** @type {ReturnType<typeof deferred>} */
let d;
export default test({ export default test({
html: `<p>pending</p>`, html: `<button>step 1</button><button>step 2</button><button>step 3</button><p>pending</p>`,
get props() {
d = deferred();
return { async test({ assert, target }) {
promise: d.promise let [button1, button2, button3] = target.querySelectorAll('button');
};
},
async test({ assert, target, component }) { flushSync(() => button1.click());
d.reject(new Error('oops!'));
await Promise.resolve(); await Promise.resolve();
await Promise.resolve(); await Promise.resolve();
flushSync(); flushSync();
assert.htmlEqual(target.innerHTML, '<p>oops!</p><button>reset</button>'); assert.htmlEqual(
target.innerHTML,
const button = target.querySelector('button'); '<button>step 1</button><button>step 2</button><button>step 3</button><p>oops!</p><button>reset</button>'
);
component.promise = (d = deferred()).promise;
flushSync(() => button?.click()); flushSync(() => button2.click());
assert.htmlEqual(target.innerHTML, '<p>pending</p>'); assert.htmlEqual(
target.innerHTML,
d.resolve('wheee'); '<button>step 1</button><button>step 2</button><button>step 3</button><p>pending</p>'
);
flushSync(() => button3.click());
await Promise.resolve(); await Promise.resolve();
await tick(); await tick();
assert.htmlEqual(target.innerHTML, '<h1>wheee</h1>'); assert.htmlEqual(
target.innerHTML,
'<button>step 1</button><button>step 2</button><button>step 3</button><h1>wheee</h1>'
);
} }
}); });

@ -1,9 +1,13 @@
<script> <script>
let { promise } = $props(); let deferred = $state(Promise.withResolvers());
</script> </script>
<button onclick={() => deferred.reject(new Error('oops!'))}>step 1</button>
<button onclick={() => deferred = Promise.withResolvers()}>step 2</button>
<button onclick={() => deferred.resolve('wheee')}>step 3</button>
<svelte:boundary> <svelte:boundary>
<h1>{await promise}</h1> <h1>{await deferred.promise}</h1>
{#snippet pending()} {#snippet pending()}
<p>pending</p> <p>pending</p>

Loading…
Cancel
Save