# promise.all 與 promise.race 語法教學
//---------------------------------------------------------------------
## promise.all
可同時聚集(聚合)多個 promise 的結果,再進行下一階段的處理。
所有Promise.all 回傳的承諾都被兌現不管是哪種情況,回傳一個以可迭代實現(包含非值)作為引數承諾的所有被實現的值。
拒絕(拒絕):
如果一個非承諾的承諾被拒絕,則所有承諾的承諾都被拒絕。
let chk = function(name){
return new Promise((resolved,reject)=>{
console.warn('批改作業中');
setTimeout(()=>{
let score = Math.round(Math.random()*100);
if(score===score){
resolved({
name,
score
})
}else{
reject('error');
}
},Math.random()*10000)
})
}
//--->Promise.all([objet,objet,objet]) 陣列形式寫法
Promise.all([chk('小花'),chk('小名'),chk('小吟')])
.then(data=>console.log(data))
.catch(err=>console.log(err))
//---------------------------------------------------------------------
## promise.race
Promise.race 只會回傳第一個的結果
拒絕(拒絕):第一個被拒絕的情況下,才會進入 catch,如下範例:
function pro(num,time){
return new Promise((resolve,rejust)=>{
setTimeout(()=>{
if(num){
resolve(`success ${num}`);
}else{
rejust(`error ${num}`);
}
},time);
})
}
Promise.race([pro(1,1000),
pro(2,800), //只有在第一個結果被拒絕時,才會跑到 catch ,
pro(0,1500) //否則即使此值為 False 也不影響 then 的結果。
])
.then(res=>{
console.log(res);
})
.catch(err=>{
console.log(err);
})