検索
ホームページウェブフロントエンド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:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

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コンピューティングの可能性をカバーしています。

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

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

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

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

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

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。