Skip to content

Search documentation

Find Svelte Patterns and Svelte reference pages.

No results for ""

Try a shorter query or a related Svelte term.

# For SSR

This returns either data for SSR or a promise of data for CSR.

playground
export const load = async ({ isDataRequest }) => {
	const slowPromise = getSlowData()
	return {
		slow: isDataRequest ? slowPromise : await slowPromise,
	}
}

const getSlowData = async () => {
	await delay(3000)
	return '😴'
}

const delay = (ms) => new Promise((res) => setTimeout(res, ms))
<script>
	let { data } = $props()
</script>

{#await data.slow}
	loading...
{:then result}
	{result}
{/await}

# For Loading Indicator

Used to display a loading indicator only when the data is slow.

playground
import { getRequestEvent } from '$app/server'

export const load = async () => {
	// Mock a network request
	const promise = getData()

	const result = await Promise.race([delay(200), promise])

	return {
		promise: result ?? promise,
	}
}

const delay = (ms) => new Promise((res) => setTimeout(res, ms))

const getData = async () => {
	const { url } = getRequestEvent()

	// for repeatable testing
	const ms = Number(url.searchParams.get('delay'))
	await delay(ms)

	// for realistic network delay
	// await delay(Math.random() < 0.5 ? 50 : 3000)

	return '😴'
}
<script>
	let { data } = $props()
</script>

<a href="/">reset</a>

<hr />

{#await data.promise}
	loading...
{:then result}
	{result}
{/await}

# Reference