A、Pomise.all使用
Promise.allプロミスプロミスは、新しいインスタンスにパッケージ化された複数のインスタンスであってもよいです。リジェクト成功は結果配列を返し、失敗が障害状態である第一の値が返されたとき一方、戻り値の成功と失敗は、異なっています。
聞かせてP1 = 新しい約束((解決、拒否)=> { 決意(' 成功了' ) }) させ、P2 = 新しい約束((解決、拒否)=> { 決意(' 成功' ) }) P3ましょう = Promseを。リジェクト(' 失败' ) Promise.all([P1、P2])。次に、((結果) => { にconsole.log(結果) // [ '成功了'、 '成功'] })。キャッチ((エラー)=> { にconsole.log(エラー) }) Promise.all([P1、P3、P2])。次に、((結果) => { にconsole.log(結果) })。キャッチ((エラー)=> { にconsole.log(エラー) // 失敗し、ショット'失敗' )}
例えば、複数の非同期処理を扱うときPromse.all非常に便利な、データのページには、2を待つ必要がある以上、AJAXのちょうどこの唯一のショーローディングアイコンの前に、通常の表示帰ってきました
= LET(時間)=>ウェイク{ 戻り 新しい新しい約束を((解決、拒否)=> { たsetTimeout(() => { 解決({$ `時間 / 1000年第wake`後}) }、時間) }) } P1 LET =覚醒(3000 ) せP2 =覚醒(2000 ) Promise.all([P1、P2])。次に、((結果) => { にconsole.log(結果) // [ 'ウェイクアップする3秒'、 '起床後2秒'] })。キャッチ((エラー)=> { にconsole.log(エラー) })
特別な注意が必要とされる、Promise.all内部得た配列成功した結果Promise.all配列データの配列順序は、受信し一貫している、すなわち、フロントP1結果、P2とP1の結果は後で取得よりも場合。これは、広大な利点をもたらします:フロントエンド開発プロセスの要求データに、時折出会いやシーンのための要求に応じてアクセスおよび使用データに複数の要求を送信、Promise.allを使用して間違いなく、この問題を解決することができます
二、Promise.race使用
名前が示すように、Promse.raceは結果が得られ、Promise.race([P1、P2、P3])、高速内部を言うことを意味し、レースの意味で、それは結果を返し、結果にかかわらず、それ自体の状態の成功または失敗の状態です。
聞かせてP1 = 新しい約束((解決、拒否)=> { のsetTimeout(() => { 決意(' 成功' ) }、1000年) }) P2ましょう = 新しい約束((解決、拒否)=> { setTimeoutメソッド(( ) => { (拒否' 失敗' ) } 500 ) }) Promise.race([P1、P2])。次に、((結果) => { にconsole.log(結果) })。キャッチ((エラー)=> { にconsole.log(エラー) // 開く「失敗」 )}
リンクします。https://www.jianshu.com/p/7e60fc1be1b2