Resolve promises in Svelte templates
Learn how to work with promises in Svelte templates
Promises are an awesome tool we have at our disposal to work with asynchronous events in JavaScript.
The relatively recent introduction of the await syntax in ES2017 made using promises even simpler.
Svelte provides us the {#await} syntax in templates to directly work with promises at the template level.
We can wait for promises to resolve, and define a different UI for the various states of a promise: unresolved, resolved and rejected.
Here’s how it works. We define a promise, and using the {#await} block we wait for it to resolve.
Once the promise resolves, the result is passed to the {:then} block:
<script>
  const fetchImage = (async () => {
    const response = await fetch('https://dog.ceo/api/breeds/image/random')
    return await response.json()
  })()
</script>
{#await fetchImage}
  <p>...waiting</p>
{:then data}
  <img src={data.message} alt="Dog image" />
{/await}
You can detect a promise rejection by adding a {:catch} block:
{#await fetchImage}
  <p>...waiting</p>
{:then data}
  <img src={data.message} alt="Dog image" />
{:catch error}
  <p>An error occurred!</p>
{/await}
Run the example: https://svelte.dev/repl/70e61d6cc91345cdaca2db9b7077a941
download all my books for free
- javascript handbook
 - typescript handbook
 - css handbook
 - node.js handbook
 - astro handbook
 - html handbook
 - next.js pages router handbook
 - alpine.js handbook
 - htmx handbook
 - react handbook
 - sql handbook
 - git cheat sheet
 - laravel handbook
 - express handbook
 - swift handbook
 - go handbook
 - php handbook
 - python handbook
 - cli handbook
 - c handbook
 
subscribe to my newsletter to get them
Terms: by subscribing to the newsletter you agree the following terms and conditions and privacy policy. The aim of the newsletter is to keep you up to date about new tutorials, new book releases or courses organized by Flavio. If you wish to unsubscribe from the newsletter, you can click the unsubscribe link that's present at the bottom of each email, anytime. I will not communicate/spread/publish or otherwise give away your address. Your email address is the only personal information collected, and it's only collected for the primary purpose of keeping you informed through the newsletter. It's stored in a secure server based in the EU. You can contact Flavio by emailing flavio@flaviocopes.com. These terms and conditions are governed by the laws in force in Italy and you unconditionally submit to the jurisdiction of the courts of Italy.