Promise.全てとPromise.race
1495 ワード
Promise.all 原理は、複数のPromiseインスタンスを新しいPromiseインスタンスにパッケージし、成功したときに結果配列を返し、失敗したときにrejectに最初に失敗した状態の値を返す. 一般的な使用シーンページでは、2つ以上のajaxのデータが戻ってくるのを待つ必要があります.これまではloadingのみが表示されていました. 用法
⚠️注意:成功時に受信した配列の順序はallパラメータ内の配列の順序であり、すなわちp 1の結果が前であっても、p 1の結果がp 2の結果より遅れて取得されてもよい.これにより、フロントエンドのデータ使用において、複数のリクエストを送信し、リクエストの順序に従ってデータを取得して使用するシーンに遭遇する場合がある.allはこの問題を解決することができる.
Promise.race原理のいずれかが正常に戻った後、完了してもプロセスはすぐに停止しません. の一般的な使用シーンでは、非同期操作とタイマを一緒に配置する、タイマが先にトリガされると、タイムアウトとみなされ、ユーザに通知する.例えば、微信の地理的位置情報を取得し、タイムアウトした場合、ユーザに注意し、この場合、地理的微信を取得して他の操作を行うことができない. 用法
let p1 = new Promise((resolve,reject) => {
resolve(' ')
})
let p2 = new Promise((resolve,reject) => {
resolve('success')
})
let p3 = Promise.reject(' ')
Promise.all([p1,p2]).then((result) => {
console.log(result) // [' ','seccess']
}).catch((error) => {
console.log(error)
})
Promise.all([p1,p3]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error)//[' ']
})
⚠️注意:成功時に受信した配列の順序はallパラメータ内の配列の順序であり、すなわちp 1の結果が前であっても、p 1の結果がp 2の結果より遅れて取得されてもよい.これにより、フロントエンドのデータ使用において、複数のリクエストを送信し、リクエストの順序に従ってデータを取得して使用するシーンに遭遇する場合がある.allはこの問題を解決することができる.
Promise.race
let p1 = new Promise((resolve,reject) => {
setTimeout(() => {
resolve(' ')
},2000);
})
let p2 = new Promise((resolve,reject) => {
setTimeout(() => {
reject('failed')
},500)
})
Promise.race([p1,p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error);//failed
})