# 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); })