タスクキュー、非同期プログラミングの理解

まず、タスクキューを理解します

JavaScriptエンジンは一度だけのコードのブロックを実行することができ、コードの一部を実行する準備ができているすべての時間は、タスクキューに追加されます。コードJavaScriptエンジンの完全な実装した後、その後、タスクキュー内の次のタスクを実行します。
1   < スクリプト> 
2  
。3  
。4          / *  
。5          
。6              のコードを実行する準備ができているときはいつでも、コードのブロックのみを実行することができるJavaScriptエンジン同じ時間は、ジョブキューに追加されます。
7              エンジンは、タスクキューに次のタスクを実行するJavaScriptコードの実行を完了します。
8          
。9           * / 
10  
。11          関数のfoo(){             
 12である             (にconsole.log ' FOOスタート' // ステップ
13で             、関数(){バー             
 14                  はconsole.log(' バー' 15              }
 16             console.log(' テスト' // 第二段
17              バール()                         // バー()を呼び出す第3の工程と、
18がある             にconsole.log(' FOOエンド' // 第四のステップ
19          }
 20は 
21である         (FOO) ;
 22は 
23である     </ スクリプト>

 

 

FOOを呼び出すときに、図1の例では、()関数、関数foo()は     関数の完了を行った後、ジョブキューに送信される  関数foo()が タスクキューから撮影されます

FOO()関数を呼び出す、実施例2、関数foo()を     遭遇し、ダウンした後、タスクキューに、およびbar()の    後に  関数bar()     キューにタスクの後に、機能の実行が完了すると、最初にエグゼクティブ    関数bar()     その後、実行  ()関数fooを       (キュースタックに対応するタスクキュー)

 

 1.2前研究のプログラム

1  < ボディ> 
2      < スクリプト> 
3。 
4。         
5。 
6。         // 非同期プログラミングモード:イベントコールバック、コールバック関数、プロミス
。7          
。8          // イベントコールバック
。9          // CONST =新しい新しいXHRのXMLHttpRequest(); 
10          // xhr.onreadystatechange =関数(){ 
11          //      IF(xhr.readyState === 4){ 
12れる         //          //ここコードは、要求の完了後に実行される
13          //      } 
14          // }; 
15  
16          // コールバック関数は、
17。         機能FOO (FUN){
 18であります             setTimeout(()=> {
 19                  // のfoo()関数すなわちパラメータ楽しみ、タスクバー着信機能の完了後に呼び出される
20                  はconsole.log(' FOOタスク完了' );
 21は                 ファン();
 22です             }、2000 23である         }
 24  
25          関数バー(){
 26である             にconsole.log(' バータスク完了' 27          }
 28  
29          // パラメータ渡されるのfoo()関数のような関数bar()
30          FOO(バー)
 31が         
32      < / スクリプト> 
33  </ ボディ>

1.3非同期プログラミング-Promiseオブジェクト

 

1  < ボディ> 
2      < スクリプト> 
3。 
4。         // プロミスオブジェクトは非同期動作を表す3つの状態がある:保留中(進行中)、成就は(失敗)(成功した)と拒否
5。 
6。         プロミスCONST =  新しい新しいプロミス(関数(解決拒否){
 7  
。8              // タスク正常、コール解決()関数を実行する
。9  
10              @ タスク実行の失敗、()関数の呼び出しを拒否する
。11  
12れる             IF 偽の){
 13は                 解決(最初のタスクの実行完了後に得られた結果' 14              }{
 15                  (拒否失敗したタスクのための第二の理由を知らせる16              }
 17  
18れる         )};
 19  
である20          // 成否監視しながらコールバック1. 
21れる         promise.then(関数(値){
 22である             // タスクが正常に実行され、ここでコードを実行し、着信タスクの機能に得られる結果である場合
23である             にconsole.log(値)
 24          }、関数(理由){
 25              // タスクの実行の失敗、コードが実行される場合、関数に渡されたタスクの失敗の原因
26がある             にconsole.log(理由)
 27          });
 28  
29         // 2.成功したコールバック・リスナーのみ
30          promise.then(関数(値){
 31は、             // タスクが実行されると正常にここでコードを実行し、着信にタスクの結果の関数で
32              コンソール.logの(値)
 33である         )};
 34である 
35          // のみ3.聞く失敗したコールバック
36          promise.thenを(NULL 関数(理由){
 37              // タスクの実行の失敗が、ここでコードを実行するとき、機能タスクの失敗の理由通過
38である             にconsole.log(理由)
 39          });
 40  
41れる         // 4キャッチ()のみエラーハンドラを通過次いで()メソッドに対応する方法。上記のコードは以下の文言に等しい:
42である         プロミス。キャッチ関数(理由){
 43              にconsole.log(理由)
 44          })
 45  
46      </ スクリプト> 
47  </ ボディ>

 

 

 

おすすめ

転載: www.cnblogs.com/wszzj/p/12002756.html