検索
ホームページウェブフロントエンドjsチュートリアルJavaScript 非同期呼び出しフレームワーク (パート 4 - 連鎖呼び出し)_JavaScript スキル

実際の開発では、一連の同期操作と非同期操作を順番に実行することが非常に一般的です。 Baidu Hi Web バージョンの例を使用すると、まず連絡先リストを非同期的に取得し、次に各連絡先の特定の情報を非同期的に取得する必要があります。後者は各リクエストで 10 件の連絡先の名前を送信し、取得します。対応する特定の情報。これは、連続して実行する必要がある複数の非同期リクエストです。
この目的を達成するには、シーケンシャル非同期オペレーション コードが従来のシーケンシャル同期オペレーション コードと同じくらいエレガントに見えるように、コードの可読性を最適化する新しいオペレーション メソッドを設計する必要があります。
従来のアプローチ
ほとんどのプログラマは、次のような逐次実行コードをよく理解できます。

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

var firstResult = firstOperation(firstResult); >alert(finalResult);


最初に実行される関数は、後で実行される関数に必要なデータを提供します。ただし、非同期呼び出しフレームワークを使用した後は、同じロジックが次のようになります。


コードをコピー コードは次のとおりです。 🎜> firstAsyncOperation(initialArgument).addCallback(function(firstResult) { secondAsyncOperation(firstResult).addCallback(function(secondResult) {
thirdAsyncOperation(secondResult).addCallback(function(finalResult) {
alert(finalResult);
});



上記のように思いますコード 非常に見苦しいので、jQuery 風のチェーンライティングに変換できることを願っています。これを行うには、まずユースケースを構築します:



コードをコピーします
コードは次のとおりです:
Async.go (initialArgument) .next(firstAsyncOperation) .next(firstAsyncOperation) .next(thirdAsyncOperation) .next(function(finalResult) {alert(finalResult); } )
この使用例では、初期化データを go に渡し、次の各処理関数の後にデータ処理関数を渡します。

同期共存

上記のユースケースはすべて非同期関数を呼び出しますが、ユーザーが特定の実装を気にせずにこの関数を使用できるように、同期関数と互換性があることが最善です。機能。この目的のために、次のような別のユースケースを作成します:



コードをコピー
コードは次のとおりです:
Async.go(0) .next(function(i) {alert(i); return i 1; }) .next(function(i) { alert(i); var オペレーション = new Async.Operation(); setTimeout(function() {operation.yield(i 1); }, 1000);
return オペレーション; (function(i ) {alert(i); return i 1; })
.next(function(i) {alert(i); return i; });


上記の使用例では、1 と 2 の間が 1000 ミリ秒の間隔で、0、1、2、3 のプロンプト情報シーケンスが表示されることが予想されます。

非同期の性質

チェーン呼び出しは本質的に非同期呼び出しであるため、Operation インスタンスも返します。このインスタンスには当然、result、state、completed というフィールドもあり、呼び出しのチェーン全体が完了すると、result は最後の呼び出しによって返された結果と等しく、completed は当然 true と等しくなります。
前のユースケースを拡張して、次のユースケースコードを取得できます:



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


varchainOperation = Async.go(0)
.next(function(i) {alert(i); return i 1; }) .next(function(i) ) { alert (i); var オペレーション = new Async.Operation(); setTimeout(function() {operation.yield(i 1); }, return オペレーション; })
.next(function(i) {alert(i); return i 1; })
.next(function(i) {alert(i); return i; });
setTiemout(function () {alert(chainOperation.result; }, 2000);


チェーン呼び出しの戻り値を保存します。チェーン呼び出しが完了すると、その結果は最後の操作の戻り値と一致するはずです。上記の使用例では、それは 3 です。
呼び出しタイミング
連鎖的な呼び出し方法を提供していますが、ユーザーは必ずしもこの固定された方法で呼び出しを行うとは限らないため、ユーザーとの互換性についてはさまざまな可能性を考慮する必要があります。次に、呼び出しチェーンに操作を非同期で追加します:
コードをコピー コードは次のとおりです:

varchainOperation = Async.go(0);
chainOperation.next(function(i) {alert(i); return i 1; });
setTimeout(function() {
chainOperation. next(function(i) {
alert(i);
varoperation = new Async.Operation();
setTimeout(function() {operation.yield(i 1); }, 2000);
リターン操作;
})
}, 1000);
setTimeout(function() {
chainOperation.next(function(i) {alert(i); return i 1; } );
}, 2000);

この使用例では、ユーザーは 1000 ミリ秒ごとに操作を追加し、2 番目の操作には 2000 ミリ秒かかります。つまり、3 番目の操作が追加された時点では、2 番目の操作はまだ戻っていません。堅牢なフレームワークとして、このような用途にも対応できる必要があります。
さらに、ユーザーが最初に呼び出しチェーンを構築してから、その呼び出しチェーンを実行したい可能性があることも考慮する必要があります。このとき、ユーザーはまず next メソッドを使用して操作を追加し、次に go メソッドを使用して実行します。
コードをコピーします コードは次のとおりです:

varchainOperation = Async
.chain (function(i) {alert(i); return i 1; })
.next(function(i) {
alert(i);
varoperation = new Async.Operation();
setTimeout (function() {operation.yield(i 1); }, 2000);
return 操作;
})
.go(0)
setTimeout(function() {
chainOperation .next(function(i) {alert(i); return i 1; })
}, 1000);

上記の使用例では、ユーザーはヘッダー同期を追加しましたviachain と next 1 つの操作と 1 つの非同期操作。その後、go を使用して呼び出しチェーンを実行し、next を使用して呼び出しチェーンが完了する前に操作を非同期的に追加します。堅牢なフレームワークでは、このような使用例でユーザーが期待するとおりに 0、1、2 を要求できる必要があります。
概要
チェーン呼び出しの需要に応えて、私たちはさまざまな奇妙な非同期呼び出しメソッドを含む非常に多くのユースケースを設計してきました。最終的にそのような機能を実現するにはどうすればよいでしょうか?
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?Apr 04, 2025 pm 09:21 PM

JavaScriptプログラミング、プロトタイプチェーンの関数パラメーターの理解と操作のJavaScriptのプロトタイプチェーンの関数のパラメーターを取得する方法は、一般的で重要なタスクです...

WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?Apr 04, 2025 pm 09:18 PM

WeChatアプレットWeb-ViewでVue.jsを使用する動的スタイルの変位障害がvue.jsを使用している理由の分析...

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1

メモ帳++7.3.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール