async/await を使用して Vue で非同期操作を処理する方法
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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