TGViewer
Григорий Петров / IT Григорий Петров / IT @hryh0rii · 42 subscribers
Post #36 147
👩‍💻Svelte: обработка промисов с помощью {#await} и нюансы {#each} блоков

Доброго времени суток 👓

Посмею предположить, что нам, как фронтендерам, нередко доводится выводить в разметку какие-либо данные, будь-то список постов или пользователи в админ-панели, или что-либо еще, сценариев бесконечное множество. И в основном этот процесс в тех или иных технологиях сводится к тому, что мы создаем состояние для необходимых данных, потенциальных ошибок, условия для обработки ожидания, делаем запрос, все отлавливаем и обрабатываем... Как будто порой довольно много телодвижений, если речь идет про бытовую задачу без особых усложнений, нет?

Svelte же в свою очередь предлагает новую фичу: {#await} блоки, которые упрощают работу с этим сценарием. Предположим, нам нужно вывести список постов

🌟Для начала создадим функцию с запросом на сервер и вернем промис:

<script>
const getPosts = async () => {
const res = await fetch('https://jsonplaceholder.typicode.com/posts');
return res.json();
};
</script>


🌟И следом прибегаем к использованию того самого {#await} следующим образом:

{#await getPosts()}
<span>waiting...</span>
{:then data}
{#each data as post (post.id)}
<p>{post.title}</p>
{:else}
<span>nothing...</span>
{/each}
{:catch error}
<span>something went wrong {error}</span>
{/await}


🌟Как мы видим, обрабатываются все три состояния: pending в блоке await, fulfilled в then и rejected в catch, тем самым избавляя от излишних переменных, проверок и дополнительных конструкций

НО

📌При желании можно отказаться и от catch, а так же и от await, если в них нет нужды. Например:

{#await getPosts() then data}
{#each data as post (post.id)}
...
{/each}
{/await}


🌟Перейдем к циклу, который выводит данные, теперь не обязательно делать дополнительныю проверку на пустоту массива, ведь each имеет дополнительный блок else, в котором можно выводить все, что нужно, если массив окажется пустым или данные недостаточно корректными

💡Также в круглых скобках есть post.id, это так называемый ключ, если его указать, Svelte будет лучше отслеживать точечные изменения в данных и тем самым избегает лишние ререндеры, что может лучше сказываться на оптимизации, если сценарий предусматривает более динамичные манипуляции

#svelte
  • 🔥 6
  • 👍 4
  • ⚡ 3
  • ❤ 1
More from @hryh0rii
  1. May 8, 2025📃 «Чистый код» Р. Мартин Содержательные имена И снова здравствуйте 🧃 Потихоньку начинаю…
  2. Mar 10, 2025👩‍💻Svelte: {#snippet}, {@render} и {@const} или же почему не слоты? Привет, спишь? Я нет…
  3. Jan 17, 2025👩‍💻Vue: inheritAttrs и гибкая работа с компонентами Внезапно, да? Но тем не менее, сегод…
  4. Jan 12, 2025👩‍💻Svelte: работа со store Отшумели летние дожди новогодние праздники, а это значит, что…
  5. Dec 29, 2024👩‍💻 Svelte: $derived и работа с состоянием И снова здравствуйте 🤔 Не отвлекаясь от подг…
  6. Dec 14, 2024Руны в Svelte — это специальные ключевые слова, которые управляют поведением компилятора.…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →