ホームページ ウェブフロントエンド Vue.js async/await を使用して Vue で非同期操作を処理する方法

async/await を使用して Vue で非同期操作を処理する方法

Jun 11, 2023 am 09:18 AM
vue async await 非同期操作

async/await を使用して Vue で非同期操作を処理する方法

フロントエンド開発の継続的な開発に伴い、Vue でより複雑な非同期操作を処理する必要があります。 Vue は非同期操作を処理するための便利な方法をすでに多数提供していますが、場合によっては、これらの非同期操作を処理するために、よりシンプルで直感的な方法を使用する必要がある場合があります。現時点では、async/await は非常に良い選択になります。

非同期/待機とは何ですか?

ES2017 では、async と await が 2 つの新しいキーワードになります。 async は、関数が非同期関数であることを示すように関数を変更するために使用されます。非同期関数では、 await を使用して Promise オブジェクトを待機し、オブジェクトの値を取得できます。

Vue では、通常、インターフェースを呼び出してデータを取得したり、画像を非同期でロードしたりするなど、Promise ベースの非同期操作を使用します。 async/await を使用すると、これらの非同期操作をより明確に処理できるようになります。

async/await を使用するにはどうすればよいですか?

async/await を使用するための基本的な構文は非常に簡単です。関数を非同期関数として宣言し、非同期操作を待機する必要がある Promise オブジェクトの戻り値を待機するために await を使用するだけです。

データ取得を例に挙げると、非同期関数 getArticleById を定義し、関数本体で http リクエストの戻り値を待つことができます。

async function getArticleById(id) {
    const response = await fetch(`/api/articles/${id}`);
    return response.json();
}
ログイン後にコピー

Vue では通常、次のように使用します。 axios はデータを取得するインターフェイスを呼び出します。 axios を非同期関数にカプセル化し、Vue コンポーネントで async/await を使用してデータを取得できます。

ブログ リストの取得を例として、非同期関数 getBlogList:

async function getBlogList() {
    const response = await axios.get('/api/blogs');
    return response.data;
}
ログイン後にコピー

を定義できます。次に、Vue コンポーネントで async/await を使用してデータを取得し、データをテンプレートに入力します:

<template>
    <div>
        <div v-for="blog in blogs" :key="blog.id">{{blog.title}}</div>
    </div>
</template>

<script>
    async function getBlogList() {
        const response = await axios.get('/api/blogs');
        return response.data;
    }

    export default {
        data() {
            return {
                blogs: []
            }
        },
        async mounted() {
            this.blogs = await getBlogList();
        }
    }
</script>
ログイン後にコピー

async/await を使用して複数の非同期操作を処理する

実際の開発では、通常、複数の非同期操作を同時に処理する必要がある状況に遭遇します。たとえば、Vue コンポーネントでは、さまざまなインターフェイスからデータを取得し、それを処理またはレンダリングする必要があります。現時点では、Promise.all() メソッドを使用して、すべての非同期操作が一度に完了するのを待つことができます。

記事とコメントの取得を例として、2 つの非同期関数 getArticle と getComments を定義できます。

async function getArticle(id) {
    const response = await axios.get(`/api/articles/${id}`);
    return response.data;
}

async function getComments(articleId) {
    const response = await axios.get(`/api/articles/${articleId}/comments`);
    return response.data;
}
ログイン後にコピー

次に、Promise.all を使用して、これら 2 つの非同期操作を 1 つの非同期関数にカプセル化できます。 () は両方の操作が同時に完了するのを待ちます:

async function getArticleWithComments(articleId) {
    const [ article, comments ] = await Promise.all([
        getArticle(articleId),
        getComments(articleId)
    ]);
    return {
        article,
        comments
    };
}
ログイン後にコピー

Vue コンポーネントでは、async/await を使用してすべてのデータを取得し、データをテンプレートにバインドできます:

<template>
    <div>
        <h1>{{article.title}}</h1>
        <p>{{article.content}}</p>
        <ul>
            <li v-for="comment in comments" :key="comment.id">{{comment.content}}</li>
        </ul>
    </div>
</template>

<script>
    async function getArticle(id) {
        const response = await axios.get(`/api/articles/${id}`);
        return response.data;
    }

    async function getComments(articleId) {
        const response = await axios.get(`/api/articles/${articleId}/comments`);
        return response.data;
    }

    async function getArticleWithComments(articleId) {
        const [ article, comments ] = await Promise.all([
            getArticle(articleId),
            getComments(articleId)
        ]);
        return {
            article,
            comments
        };
    }

    export default {
        data() {
            return {
                article: {},
                comments: []
            }
        },
        async mounted() {
            const data = await getArticleWithComments(this.$route.params.articleId);
            this.article = data.article;
            this.comments = data.comments;
        }
    }
</script>
ログイン後にコピー

try/catch を使用して例外を処理する

非同期関数を使用する場合は、例外処理にも注意する必要があります。非同期関数でエラーが発生した場合、try/catch ステートメントを使用して例外をキャッチし、それに応じて処理できます。

ユーザー情報の取得を例として、非同期関数 getUserInfo を定義できます。ユーザーがログインしていない場合、サーバーからユーザー情報を取得する際に不正なエラーが返されます。 try/catch ステートメントを使用してエラーをキャプチャし、それに応じて処理できます:

async function getUserInfo() {
    try {
        const response = await axios.get('/api/user');
        return response.data;
    } catch (error) {
        if (error.response && error.response.status === 401) {
            // 用户未登录
            return null;
        } else {
            // 其它异常
            throw error;
        }
    }
}
ログイン後にコピー

Vue コンポーネントでは、async/await を使用してユーザー情報を取得し、戻り値に基づいて適切に処理できます:

<template>
    <div>
        <div v-if="user">{{user.name}},欢迎回来!</div>
        <div v-else>请先登录</div>
    </div>
</template>

<script>
    async function getUserInfo() {
        try {
            const response = await axios.get('/api/user');
            return response.data;
        } catch (error) {
            if (error.response && error.response.status === 401) {
                // 用户未登录
                return null;
            } else {
                // 其它异常
                throw error;
            }
        }
    }

    export default {
        data() {
            return {
                user: null
            }
        },
        async mounted() {
            this.user = await getUserInfo();
        }
    }
</script>
ログイン後にコピー

概要

async/await を使用すると、Vue での非同期操作をより明確に処理できるようになります。 async/await を使用して Promise オブジェクトの戻り値を待機し、Promise.all() を使用して複数の非同期操作が一度に完了するのを待機できます。同時に、非同期関数を使用する場合は、try/catch ステートメントを使用して非同期操作の例外をキャッチする例外処理にも注意する必要があります。

以上がasync/await を使用して Vue で非同期操作を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

Vueはマーキー/テキストスクロール効果を実現します Vueはマーキー/テキストスクロール効果を実現します Apr 07, 2025 pm 10:51 PM

CSSアニメーションまたはサードパーティライブラリを使用して、VUEでマーキー/テキストスクロール効果を実装します。この記事では、CSSアニメーションの使用方法を紹介します。スクロールテキストを作成し、テキストを&lt; div&gt;をラップします。 CSSアニメーションを定義し、オーバーフローを設定します:非表示、幅、アニメーション。キーフレームを定義し、アニメーションの開始と終了時にtranslatex()を設定します。期間、スクロール速度、方向などのアニメーションプロパティを調整します。

Vueによる前のページに戻る方法 Vueによる前のページに戻る方法 Apr 07, 2025 pm 11:30 PM

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

Vueのバージョンを照会する方法 Vueのバージョンを照会する方法 Apr 07, 2025 pm 11:24 PM

Vue Devtoolsを使用してブラウザのコンソールでVueタブを表示することにより、Vueバージョンを照会できます。 NPMを使用して、「NPM List -G Vue」コマンドを実行します。 package.jsonファイルの「依存関係」オブジェクトでVueアイテムを見つけます。 Vue CLIプロジェクトの場合、「Vue -Version」コマンドを実行します。 &lt; script&gt;でバージョン情報を確認してくださいVueファイルを参照するHTMLファイルにタグを付けます。

VUEトラバーサルの使用方法 VUEトラバーサルの使用方法 Apr 07, 2025 pm 11:48 PM

Vue.jsには配列とオブジェクトを通過するには3つの一般的な方法があります。V-Forディレクティブは、各要素をトラバースしてテンプレートをレンダリングするために使用されます。 V-BindディレクティブをV-Forで使用して、各要素の属性値を動的に設定できます。 .mapメソッドは、配列要素を新しい配列に変換できます。

See all articles