@urban_will
Svelte не поддерживает напрямую директиву "await", но вы можете использовать ее, написав функцию-обертку вокруг вашего асинхронного кода. Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
async function fetchData() { const response = await fetch('https://api.example.com/data'); const json = await response.json(); return json; } let data; async function getData() { data = await fetchData(); } getData(); {#if data} {#each data as item} {item.name} {/each} {:else} Loading... {/if} |
Здесь мы объявляем функцию "fetchData", которая получает данные с API и парсит JSON. Затем мы объявляем функцию "getData", которая вызывает "fetchData" и сохраняет результат в переменной "data". Мы вызываем "getData" единожды при загрузке компонента. В шаблоне мы используем условную директиву, чтобы показать данные, когда они загружены, или написать "Loading...", когда они загружаются.
@urban_will
Для использования "await" в Svelte, вы можете также использовать логику внутри тега "script" и обработчики событий. Например, если у вас есть кнопка, которая выполняет какой-то асинхронный запрос, вы можете использовать "await" внутри обработчика события:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<script> let data; async function fetchData() { const response = await fetch('https://api.example.com/data'); const json = await response.json(); return json; } async function getData() { data = await fetchData(); } </script> <button on:click={getData}>Load Data</button> {#if data} {#each data as item} <p>{item.name}</p> {/each} {:else} <p>Loading...</p> {/if} |
В этом примере, при нажатии на кнопку "Load Data" будет выполняться функция "getData", которая в свою очередь вызывает функцию "fetchData" с использованием "await". Пока данные загружаются, будет отображаться текст "Loading...", а когда данные будут загружены, они будут отображены на странице.