ホームページ ウェブフロントエンド jsチュートリアル JavaScript非同期プログラミングのコード記述仕様 お約束学習ノート_JavaScriptスキル

JavaScript非同期プログラミングのコード記述仕様 お約束学習ノート_JavaScriptスキル

May 16, 2016 pm 04:14 PM
javascript promise 非同期プログラミング

最近仕事が少し楽になってきましたが、前にいつも見ていた約束という単語を思い出したので、しばらく根気よく勉強しました。

1: 約束とは何ですか?なぜこんなものがあるんですか?

まず第一に、Promise は JavaScript 非同期プログラミングでのコード記述の問題を解決するために作成されました。
JavaScript の発展に伴い、非同期シナリオがますます増えています。フロントエンドには AJAX、setTimeout などがあり、バックエンド Node はより非同期です。従来のアプローチによれば、さまざまなコールバックがコールバックに埋め込まれます。コードが混乱する可能性があります。
このとき、CommonJS コミュニティは Promise/A と呼ばれる仕様を提案しました。これは、非同期コードを整理するために when/then/resolve などを使用することを含む、非同期コードの記述方法を定義します。
この仕様は非常に洗練されているため、ブラウザーでネイティブにサポートされている Promise() や、jQuery、when.js などで遅延されている Promise() など、多くの人がこの仕様を実装しています。
これらのライブラリはすべてこの仕様に準拠しているため、どれか 1 つを学習すれば十分です。私はjQueryのdeferredを主に学習したので、この記事では主にこの実装について話します。

2: jQuery の遅延

まず、延期されたオブジェクトに関しては、Ruan Yifeng 先生が非常に詳細な記事を書いています。アドレスはここです。まず彼の記事を読んでから読み続けることをお勧めします。
上で述べたように、Promise は非同期問題 (ajax など) を解決するために使用されるため、それらの違いを比較してみましょう。
古典的な jQuery AJAX の記述方法は

です。

コードをコピーします コードは次のとおりです:

$.ajax({
入力: "get",
URL: ""、
成功: function () {},
エラー; 関数 () {}
});

success パラメーターと error パラメーターは、成功/失敗が発生したときのコールバック関数です。

そして、jQuery の AJAX 記述メソッドは

になりました。

コードをコピーします コードは次のとおりです:

$.ajax({
「取得」と入力します。
URL: ""
}).done(function () {}).fail(function () {});

成功すると、done の関数が呼び出され、失敗すると、fail の関数が呼び出されます。

これを見ると、done/fail メソッドはどのオブジェクトにあるのかという疑問が生じるかもしれません。 $.ajax() はどのオブジェクトを返しますか?また、なぜこれら 2 つのメソッドがあるのでしょうか?
答えは、以下で紹介する Deferred オブジェクトにあります。

jQuery は新しいタイプの Deferred を提供します。 $.Deferred() を通じて生成されます。たとえば

コードをコピーします コードは次のとおりです:

var def = $.Deferred();

この def は、done/fail/resolve/reject などの多くのメソッドを継承します。
したがって、ここでは、上記の $.ajax() が実際にこのオブジェクトを返すこともわかります。

遅延オブジェクトには多くのメソッドがあります。詳細については、API
を参照してください。
まず、def オブジェクトを自然に生成します。ここには次のような多くのメソッドがあります:

コードをコピーします コードは次のとおりです:

var def = $.Deferred() // 自分で生成します
$.ajax({}); // ajax メソッドは def オブジェクトも返します
$.when(); // when メソッドは def オブジェクトも返します

ここで、$.when() については個別に説明します。このメソッドは通常、1 つ以上の遅延オブジェクトを受け取り、これらの遅延オブジェクトのステータスに基づいて $.when() によって返されるオブジェクトの状態を決定します。使用シナリオの 1 つは、複数の ajax リクエストの 1 つが失敗した場合、それらはすべて失敗とみなされます。$.when($.ajax()、$ など) で複数の ajax メソッドを渡すことができます。 ajax())。その後、$.when は def オブジェクトを返します (これら 2 つのリクエストの結果に基づいて判断されます)。

次に、def オブジェクトを取得した後、このオブジェクトの状態を変更する一連のメソッドがあります

コードをコピー コードは次のとおりです:

def.resolve(); // def オブジェクトを completed に設定すると、def.done() でバインドされた関数がすぐに実行されます。
def.reject(); // def オブジェクトを失敗に設定すると、def.fail() でバインドされた関数がすぐに実行されます。
def.notify(); // def オブジェクトが実行されるとき、対応するコールバックは def.progress() です。

次のステップは、コールバック メソッドを設定することです。順序は上記に対応します。つまり、どの状態でどのコールバックを呼び出すかです。

コードをコピーします コードは次のとおりです:

def.done(); // def.resolve();
に対応します。 def.fail(); // def.reject();
に対応します。 def.progress(); // def.notify();
に対応します。 // 特別な
def.always(); // 成功または失敗時に呼び出されます
def.then(); // 成功 (完了)、失敗 (失敗)、進行状況 (進捗) の順に複数の関数を受け入れます

実際、この時点では、遅延オブジェクトの使用法はほぼ同じです。ただし、jQuery はいくつかの API も提供します

コードをコピーします コードは次のとおりです:

// 現在のステータスクラスを確認します
def.isRejected();
def.isResolved();
def.state();

これらの API の名前が示すとおり、詳細については説明しません。詳細については、上記の jQuery API ドキュメントを確認してください。

別の方法があります。つまり、外部の def オブジェクトを指定したい場合があります。その場合、このオブジェクトはさまざまな状態のコールバックを設定できますが、その状態を変更することはできません。その場合は、

を使用できます。

コードをコピーします コードは次のとおりです:

def.promise();

遅延オブジェクトのサブセットである Promise オブジェクトを返します。done/fail やその他のメソッドを使用できます。これは主に def オブジェクトの状態を保護するためのものです。外部によって変更されました。

この時点で、約束についての話は終わりました。これで、ご自身のプロジェクトに使用できます。また、新年が明けましておめでとうございます。未年が皆様にとって素晴らしい年になることをお祈りしています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

C++ 関数を使用して非同期プログラミングを実装するにはどうすればよいですか? C++ 関数を使用して非同期プログラミングを実装するにはどうすればよいですか? Apr 27, 2024 pm 09:09 PM

概要: C++ の非同期プログラミングを使用すると、時間のかかる操作を待たずにマルチタスクを行うことができます。関数ポインターを使用して、関数へのポインターを作成します。コールバック関数は、非同期操作が完了すると呼び出されます。 boost::asio などのライブラリは、非同期プログラミングのサポートを提供します。実際のケースでは、関数ポインターと boost::asio を使用して非同期ネットワーク リクエストを実装する方法を示します。

約束を守る: 約束を守ることの長所と短所 約束を守る: 約束を守ることの長所と短所 Feb 18, 2024 pm 08:06 PM

日常生活では、約束と履行の間で問題に遭遇することがよくあります。個人的な関係でもビジネス取引でも、約束を守ることが信頼を築く鍵となります。ただし、コミットメントの是非についてはしばしば議論の余地があります。この記事では、約束の長所と短所を検討し、約束を守る方法についていくつかのアドバイスを提供します。約束されたメリットは明らかです。まず、コミットメントは信頼を築きます。人が約束を守るとき、その人は信頼できる人であると他人に信じ込ませます。信頼は人々の間に確立される絆であり、それは人々をより良くすることができます

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

Java フレームワークでの非同期プログラミングにおける一般的な問題と解決策 Java フレームワークでの非同期プログラミングにおける一般的な問題と解決策 Jun 04, 2024 pm 05:09 PM

Java フレームワークでの非同期プログラミングにおける 3 つの一般的な問題と解決策: コールバック地獄: Promise または CompletableFuture を使用して、より直感的なスタイルでコールバックを管理します。リソースの競合: 同期プリミティブ (ロックなど) を使用して共有リソースを保護し、スレッドセーフなコレクション (ConcurrentHashMap など) の使用を検討します。未処理の例外: タスク内の例外を明示的に処理し、例外処理フレームワーク (CompletableFuture.Exceptionally() など) を使用して例外を処理します。

Promise.resolve() について詳しく見る Promise.resolve() について詳しく見る Feb 18, 2024 pm 07:13 PM

Promise.resolve() の詳細な説明には、特定のコード例が必要です。Promise は、非同期操作を処理するための JavaScript のメカニズムです。実際の開発では、順番に実行する必要があるいくつかの非同期タスクを処理する必要があることがよくあり、満たされた Promise オブジェクトを返すために Promise.resolve() メソッドが使用されます。 Promise.resolve() は Promise クラスの静的メソッドであり、

golang フレームワークは同時実行性と非同期プログラミングをどのように処理しますか? golang フレームワークは同時実行性と非同期プログラミングをどのように処理しますか? Jun 02, 2024 pm 07:49 PM

Go フレームワークは Go の同時実行性と非同期機能を使用して、同時タスクと非同期タスクを効率的に処理するためのメカニズムを提供します。 1. 同時実行性は Goroutine によって実現され、複数のタスクを同時に実行できます。 2. 非同期プログラミングはチャネルを通じて実装されます。メインスレッドをブロックせずに実行可能。 3. HTTP リクエストの同時処理、データベース データの非同期取得などの実用的なシナリオに適しています。

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

PHP での非同期プログラミングの長所と短所は何ですか? PHP での非同期プログラミングの長所と短所は何ですか? May 06, 2024 pm 10:00 PM

PHP での非同期プログラミングの利点には、スループットの向上、待ち時間の短縮、リソース使用率の向上、およびスケーラビリティが含まれます。欠点としては、複雑さ、デバッグの難しさ、ライブラリのサポートの制限などが挙げられます。実際のケースでは、WebSocket 接続の処理に ReactPHP が使用され、非同期プログラミングの実際的な応用例が示されています。

See all articles