検索
ホームページウェブフロントエンドjsチュートリアルフェッチAPIおよびES6ジェネレーターを使用した非同期API

Asynchronous APIs Using the Fetch API and ES6 Generators

コアポイント

  • 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;
  }
}
上記の2つのケースでは、関数が同じように動作します。

キーワードを使用する唯一の理由は、次の反復(それ自体が少し非同期のように思える)まで関数の実行を一時停止することです。 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;
  }
}
次に、上記の関数を呼び出してジェネレーターを取得し、サーバーから取得した値をUIに入力するためにロジックの一部を記述しましょう。発電機の各呼び出しは、約束を返すため、これらの約束をリンクする必要があります。以下は、上記の関数を使用して返されるジェネレーターのコードフレームワークです。

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});
  }
});
この記事では、ジェネレーターを使用してフェッチAPIを使用して非同期APIを構築する方法を示しました。 ECMAScript 6は、言語に多くの新機能をもたらし、それらを組み合わせて力を活用する創造的な方法を見つけることで、多くの場合、素晴らしい結果につながります。しかし、あなたはどう思いますか?これは、すぐにアプリで使用を開始できるテクノロジーですか?コメントであなたの考えを聞きたいです。

(以前の情報からコンテンツが高度に複製されているため、FAQパーツはここで省略されています)

以上がフェッチAPIおよびES6ジェネレーターを使用した非同期APIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター