You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte/packages/svelte/tests/runtime-runes/samples/async-resolve-stale/main.svelte

40 lines
664 B

<script>
let count = $state(0);
let value = $state('');
let resolver;
function asd(v) {
let r = Promise.withResolvers();
function update_and_resolve() {
count++;
r.resolve(v);
}
// make sure the second promise resolve before the first one
if (resolver){
new Promise(r => {
setTimeout(r);
}).then(update_and_resolve).then(() => {
setTimeout(() => {
resolver();
resolver = null;
});
});
} else if (v) {
resolver = update_and_resolve;
} else {
Promise.resolve().then(update_and_resolve);
}
return r.promise;
}
const x = $derived(await asd(value))
</script>
<input bind:value />
{count} | {x}