🚋
【Nuxt】Async/Awaitで非同期処理を行う
はじめに
async
とawait
は非同期処理がより扱いやすくなる構文です。これらの詳細とNuxtで利用する方法について説明します。
Async/Awaitの基本
async
async
関数は、非同期処理を行う関数を定義するために使われます。async
キーワードを関数の前につけると、その関数は必ずPromise
を返します。Promise
は非同期処理の結果を表すオブジェクトで、成功の場合はresolve
され、失敗の場合はreject
される値を持ちます。
async function fetchData() {
// 非同期処理
}
await
await
は、async
関数内で使用され、Promise
の解決を"待つ"ために用います。await
が付いた処理が完了するまで、関数の実行が一時的に停止しますが、これは他の処理(イベントループ内)に影響を与えません。
async function fetchData() {
let data = await someAsyncFunction(); // Promiseがresolveされるのを待つ
console.log(data); // Promiseが解決された値がここに入る
}
NuxtでのAsync/Awaitの使用例
Nuxtでは、Vueコンポーネントの中で直接async/awaitを使ってデータをフェッチしたり、サーバーサイドでの操作を行うことが可能です。Nuxtにおける非同期データフェッチングの一般的な形式は以下です。
<template>
<div>
<p v-if="error">エラーが発生しました: {{ error }}</p>
<div v-else-if="data">{{ data }}</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
const data = ref(null)
const error = ref(null)
// `async`を使用した非同期データフェッチング
async function loadData() {
try {
data.value = await fetch('https://api.example.com/data')
.then(response => response.json())
} catch (err) {
error.value = err.message
}
}
// クライアントサイドでコンポーネントがマウントされた後にデータをロード
onMounted(async () => {
await loadData()
})
</script>
Discussion