我々はそれがループのため、foreachループでJSを理解する必要があります1.まず、マップサイクルのいくつかの違いが直接それがに来るときの背後に言って、いくつかの基礎を提供します
基本サイクル用1.1、だけでなく、最も容易に理解。
1.2のforEachとマップの使用量は、似ています
同じポイント:
あなたがすることができ、配列の各要素に横断し、同じパラメータ(配列現在のアイテムのアイテム、現在の項目のインデックスindex、元の配列の入力)
違い:
forEachの()メソッドは、配列の各要素に提供される機能を実行します。常にundefinedを返します。
1 VARの進= [1,2,3,4,5 ]; 2。1 .forEach() 。3 // 未定義ノーリターン値、 4 ary.forEach(関数(値、インデックス、アレイ){ 5 // 何かを 6。 }、この) 。7 。8 2 .MAP() 。9 // 値を返し、それが戻ってもよい 。11(ary.map 関数(値、インデックス、アレイ){ 12は //が何か行う 13は、 戻りXXX 14、} 本)
リストには、5つのタブを持って、我々は5つのタブいるいくつかのデータを取得する必要があり、その後、順番をプリントアウトクリック:2今、私たちは現在、このようなシーンを持っていることを前提とし、マルチ非同期操作の考え方を理解し始めます
タブの2.1データ収集方法は、我々がforループを使用する予定のこの時間は非同期であります
1非同期関数UpdateClientCache(){ 2 // デバッガ 3 はconsole.log( '開始' ) 4 はconsole.log(新しい日付()) 5 arrList = [1,2,3せ】 6 = LET結果[] 7 のための( arrListのCONST反復子){ 8 result.push(のawait この .getLMxTableInfo(イテレータ))// getLMXTableInfo()是一个异步的操作 9 } 10 はconsole.log( '終了' ) 11 にconsole.log(結果) 12 console.log(新しい新しい日付()) 13であり 、} 14 15 // 順次リターンのそれぞれの非同期操作の出力結果に格納され、次の非同期動作getLMXTableInfoを(実行を想像することは困難結果)最後に返されます二次との関係の後
2.2は、我々はそれにforeachループのための-の上記を取る場合は?それにマッピングすると?
1 UpdateClientCache(){ 2 // デバッガ 3 はconsole.log(新しい新しい日付()) 。4 arrListは= [1,2,3ましょう] 。5 LET結果= [] 。6 LETはarrList.map =((DOC)=>約束コモン.getLMxTableInfo(DOC)); 7 結果= ザはPromise.all待つ(約束)を、 図8 にconsole.log(結果) 図9 はconsole.log(新しい新しい日付()) 10は }
//非同期動作は、実際には、並列たびに実行されます最後に、時間節約操作の戻り値に依存しない、とターンの戻り値に(ここではあなたが)新しい睡眠を(比較することにより、非同期時間を調整するために、実際の動作に行くことができ、私の理解では、非同期処理がまだ待っているということですが、同期部分がありますパラレル)
// foreachyは、我々は異なる文言を持つことができるのと同じ理由で、私たちは、これはforEachの機能であることに注意する必要があります。配列の各要素に対して関数が実行され、一度に提供し、我々は書くことができます
UpdateClientCache(){
はconsole.log(新しいDate())
せarrList = [1,2,3 ]
せた結果= []
arrList.forEach(非同期関数(DOC){
result.push(待機common.getLMXTableInfo(DOC))
})
console.log(結果)//コースは未定義で
はconsole.log(()新しい新日)
}
すべてのトラバースforeachのなければならないので、//説明し、これは上記と同じでなければならないが、非同期同時ケースの複数に属し機能再提供
common.getLMXTableInfo = RES1 LET(1)待機する対応
ザがcommon.getLMXTableInfo RES2 =(2)待ってみましょうと
聞かせてRES3 =はcommon.getLMXTableInfoを待つ(3)
result.push()RES1、RES2、RES3
私は特定の理由はまだ明らかではないいくつかの場所では、いくつかは、時間のかかる減少の現象を再現していないので、いくつかの場所はまだ予約が、我々はこの考えに基づいていくつかのテストを行うことができない、テストでの非同期の例を説明ES6に従ってこれを行います、カスタム関数の非同期は、コールバックが与えられ、テスト時間は、新たな睡眠(でき)
時間のテストを達成するために閉塞を引き起こすために、あなたも、この例を使用することができます。
1つの VAR今= 新しい新しい日付(); 2 VaRのそのnow.getTimeのexitTime =()+ 4000 ; //特定の時間は、ミリ秒の単位を変更することができる 3。 一方、(真の){ 4。 今= 新しい新しい日付(); 5 IF(今。 getTime()> そのexitTime){ 6。 BREAK ; 7 } 。8 }
の方法は、フロントエンド//待機思想の一種であり、これは、パラメータ特定ミリ秒内に包装することができます