더북(TheBook)

데이터를 너무 빨리 가져오면 왼쪽 상황이 재현되지 않는 것처럼 보일 수 있어요. {#await} 블록에 “가져오는 중 잠시만 기다리세요” 메시지가 보이지 않고 바로 리스트가 나옵니다. 하지만 실제 서비스를 개발할 때는 여러 가지 원인으로 지연이 생기는 경우가 있어서 그럴 때는 잘 보이죠. 그래서 fetch와 함께 쓰는 {#await}는 아주 유용합니다.

전체 코드는 다음과 같습니다.

REPL의 App.svelte 전체 코드
<script>
    // async 함수 정의
    async function getPosts(){
        // 원격지 데이터를 fetch로 가져오기
        const res = await fetch("https://jsonplaceholder.typicode.com/posts"); 
        const json = await res.json(); // fetch 결과를 JSON 객체로 변환
        return json;                   // JSON 객체 반환
    }
    let promisePosts = getPosts();     // 최초 호출
</script>
<main>
    <!-- 버튼 클릭 시 getPosts 함수를 호출하여 원격지 데이터 가져오기 -->
    <button on:click={() => promisePosts = getPosts()}> 포스트 리스트 가져오기 </button>
    <table border="1">
        <thead>
            <th>id</th>
            <th>사용자</th>
            <th>타이틀</th>    
            <th>내용</th>
        </thead>
        <tbody>
        {#await promisePosts} <!-- 동작 중일 때 처리 -->
            <tr>
                <td colspan=4>
                가져오는 중 잠시만 기다리세요
                </td>
            </tr>  
        {:then posts} <!-- 정상 종료 후 처리 -->
            {#each posts as post} <!-- fetch 결과의 데이터 개수만큼 반복 실행 -->
                <tr> <!-- tr, td 엘리먼트로 출력 -->
                    <td>{post.id}</td>
                    <td>{post.userId}</td>
                    <td>{post.title}</td>
                    <td>{post.body}</td>
                </tr>
            {/each}
        {/await}        
        </tbody>
    </table>
</main>
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.