継続する()次を呼び出すことにより、停止状態マシン非同期遭遇利回りとして動作するための発電機。2つの実際の開発のアプリケーションを説明するための発電機と今日。
1、懸賞
関数描画(COUNT){//シミュレー描画 のsetTimeout(関数(COUNT){ にconsole.log( `さらに残り$ {} chance`カウント);! }、 1000 ); } 関数generatorDraw(COUNT){//ジェネレータを生成します関数 一方(COUNT> 0 ){ COUNT - ; 収率ドロー(COUNT); } } beginDrawせ(3)= generatorDraw; // これは、通常、サービスコールの3末端から得られ、 CONST BTN =のdocument.createElement(「ボタン' ); btn.innerText ='描く' ; btn.addEventListener( 'クリック」、関数(){ beginDraw.next()。 })
document.body.addpendChild(BTN)。
あなたは回数を減らす達成するために次の時間を呼び出すように、ボタンのクリックするたびに、もちろん、もちろん、あなたはまた、ロジックを毎回行うことができ、毎回論理実行を描くので、禁止ボタンをクリックします。このもう少し厳しいです。
2、ロングポーリング
ロングポーリングの前にタイマーが連続アクセスで指定されたインタフェースです。現在のブラウザのビューでのWebSocketは非常に良いされているサポートしているので、それらのほとんどは、直接のWebSocketを使用することができますが、これは約アイデアの発電機を使用することによってシミュレートすることができます。
関数 * AJAX(){ // アナログAJAXリクエスト 収率新しい新しいプロミス((解決、拒否)=> { たsetTimeout(関数(){ 解決({コード: 0 }); } 200である) }) } 関数(プル){ ジェネレータLET = アヤックス(); のlet STEP = generator.next(); step.value.then(RES => { IF!(res.codeが== 0){ // データは、前に取得し、時間を比較したいです、それは異なる、同じをポーリングし続けた場合、出力し たsetTimeout(関数(){ にconsole.log(データが更新されていない`、poll`し続ける); プル(); }、 1000年) } 他{ にconsole.logは(RES); } }) } ()引っ張ります。