フェッチAPIおよびES6ジェネレーターを使用した非同期API
コアポイント
- ECMAScript 6(ES6)は、PromiseとGeneratorを通じて非同期プログラミングをより適切にサポートし、リモートリソースとの通信の基礎としてXmlhttpRequestを置き換えるように設計されたFetch APIを導入しました。
- Fetch APIメソッドは、発電機とともに使用できるES6 Promiseオブジェクトを返し、各操作が以前の操作によって返される値に依存する一連の操作など、複雑な非同期操作の基礎を形成します。
- ジェネレーターは、フェッチAPIで使用して、長いポーリングなどのタスクを実行できます。クライアントは、応答が得られるまでリクエストをサーバーに常に送信します。これは、データを含む前に応答を作成することによって行われます。
- Fetch APIおよびES6ジェネレーターを使用して、複数の依存関係の非同期呼び出しを実装することもできます。この後の各操作は、前の操作によって返される値に依存します。これは、それらを発電機関数に入れて、必要に応じて実行することで実行できます。
ECMAScript 6(別名ECMAScript 2015またはES6)は、JavaScriptに多くの新機能をもたらし、大規模なアプリケーションに最適です。 1つの機能は、PromiseとGeneratorを使用した非同期プログラミングをより適切にサポートすることです。もう1つは、リモートリソースとの通信の基礎としてXmlhttpRequestを置き換えるように設計されたFetch APIの追加です。
Fetch APIメソッドは、Generatorと組み合わせて使用して複雑な非同期操作の基礎を形成できるES6 Promiseオブジェクトを返します。これは、一連の非同期操作(それぞれが以前の操作によって返された値に依存します)から、最新の更新を取得するためにサーバーに非同期コールを繰り返し発行する必要がある操作まで、何でもかまいません。
この記事では、ジェネレーターを使用してフェッチAPIを使用して非同期APIを構築する方法を学びます。 Fetch APIは現在、Chrome、Opera、Firefox、およびAndroidブラウザーによってサポートされています。サポートされていないブラウザの場合、GitHubからポリフィルを提供します。いつものように、この記事のコードはGitHubリポジトリに記載されており、記事の下部に最終的な手法のデモンストレーションがあります。
非同期操作にジェネレーターを使用
ヒント:ジェネレーターのコンテンツとその仕組みを確認する必要がある場合は、ECMAScript 2015:ジェネレーターとイテレーターを確認してください。
では、ジェネレーターを使用して非同期操作をどのように実行しますか?まあ、ジェネレーターの仕組みを分析すると、答えが見つかります。イテレーターを実装するジェネレーター関数には、次の構造があります。
function *myIterator(){ while(condition){ //计算要返回的下一个值 yield value; } }
yield
上記の関数を
function *myIterator(){ while(condition){ //计算要返回的下一个值 yield value; } }
キーワードを使用する唯一の理由は、次の反復(それ自体が少し非同期のように思える)まで関数の実行を一時停止することです。 yield
ステートメントは任意の価値を返すことができるため、約束を返して、関数を複数の非同期呼び出しに実行させることもできます。 yield
fetch api でジェネレーターを使用します
ヒント:Fetch APIのレビューについては、チェックアウト:Fetch APIの紹介 前述のように、Fetch APIはxmlhttprequestを置き換えるように設計されています。この新しいAPIは、HTTP要求のさまざまな部分を制御し、サーバーの応答に基づいて解析または拒否された約束を返します。
長い世論調査
フェッチAPIとジェネレーターを一緒に使用できるユースケースの1つは、長いポーリングです。長いポーリングは、応答が得られるまでクライアントがサーバーに常にリクエストを送信する手法です。この場合、ジェネレーターを使用して、応答にデータが含まれるまで応答を継続的に生成できます。
長いポーリングをシミュレートするために、5回の試行後に市のリアルタイムの天気情報に応答するサンプルコードにExpress Rest APIを含めました。これがREST API:
ですここで、このAPIを複数回呼び出し、各反復の約束を返すジェネレーター関数を書きましょう。クライアントでは、サーバーからデータを取得する繰り返しの数がわかりません。したがって、この方法には無限のループがあり、各反復はサーバーをpingし、各反復の約束を返します。以下は、この方法の実装です
function *myIterator(){ //计算值 1 yield value1; //计算值 2 yield value2; ... //计算值 n yield valuen; }
この関数を継続的に呼び出して、約束者の後に値が存在するかどうかを確認するための関数が必要です。これは、ジェネレーターの次の反復を呼び出す再帰関数であり、発電機から返された値が見つかった場合にのみプロセスを停止します。次のコードスニペットは、この方法の実装とこの方法を呼び出すステートメントを示しています。
var polls=0; app.get('/api/currentWeather', function(request, response){ console.log(polls, polls < 5); if(polls < 5){ polls++; response.send({}); } else { response.send({temperature: 25}); } });
はジェネレーターオブジェクトを作成します。
メソッドは、function *pollForWeatherInfo(){ while(true){ yield fetch('/api/currentWeather',{ method: 'get' }).then(function(d){ var json = d.json(); return json; }); } }
メソッドによって返される約束が含まれています。この約束が解析されると、空のオブジェクト(runPolling
変数が5未満の場合は返されます)、または必要な情報を含む別のオブジェクトが含まれます。 next
value
次に、このオブジェクトのfetch
プロパティを確認します(これは成功を示します)。存在しない場合は、ジェネレーターオブジェクトを次の関数呼び出しに渡します(ジェネレーター状態を失わないように)、またはコンソールにオブジェクトの値を印刷します。 polls
https://www.php.cn/link/494ad0d24e15c7da81c7ea265c7f4cb4 <結果:temperature
0 true 送信...空 1真 送信...空 2真 送信...空 3真 送信...空 4真 送信...空 5 false 送信...オブジェクト
およびオブジェクト自体がブラウザコンソールに印刷されました。
複数の依存関係の非同期呼び出し通常、複数の依存関係の非同期呼び出しを実装する必要があります。そこでは、それぞれの非同期操作は、以前の非同期操作によって返された値に依存します。そのような操作のセットがあり、それらを複数回呼び出す必要がある場合は、それらを発電機関数に入れて、必要に応じて実行できます。
これを実証するために、GithubのAPIを使用します。このAPIは、ユーザー、組織、およびリポジトリに関する基本的な情報にアクセスできます。このAPIを使用して、貢献者のリストを組織のランダムリポジトリに取得し、画面に取得したデータを表示します。
これを行うには、3つの異なるエンドポイントを呼び出す必要があります。以下は、実行する必要があるタスクです。組織の詳細を入手してください
組織が存在する場合は、組織のリポジトリを取得します
- 組織のリポジトリの1つに貢献者を取得します(ランダムに選択)
- フェッチAPIの周りにラッパー関数を作成して、ヘッダーを作成してリクエストオブジェクトを作成するためのコードの繰り返しの書き込みを避けましょう。
function *myIterator(){ while(condition){ //计算要返回的下一个值 yield value; } }
function *myIterator(){ //计算值 1 yield value1; //计算值 2 yield value2; ... //计算值 n yield valuen; }
next
結論
var polls=0; app.get('/api/currentWeather', function(request, response){ console.log(polls, polls < 5); if(polls < 5){ polls++; response.send({}); } else { response.send({temperature: 25}); } });
(以前の情報からコンテンツが高度に複製されているため、FAQパーツはここで省略されています)
以上がフェッチAPIおよびES6ジェネレーターを使用した非同期APIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

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

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

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

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...
