這兩個方法,都是並行執行多個異步操作。而不同的是,all方式遵循“誰跑得慢,以誰為准執行回調”,而race遵循的是“誰跑的快,以誰為准執行回調”
以下為兩個異步函數
function yibu1() { var p1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('第一個異步執行成功') },3000) }) return p1 } function yibu2() { var p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('第二個異步執行成功') },2000) }) return p2 }
當使用all實現並行執行時,結果如下
Promise.all([yibu1(), yibu2()]).then(function (res) { console.log(res) }).catch(function (reason) { console.log(reason) })
返回的是每個異步函數執行回調后的結果組成的數組
當使用race實現並行執行時,結果如下
Promise.race([yibu1(), yibu2()]).then(function (res) { console.log(res) }).catch(function (reason) { console.log(reason) })
誰先執行結束,誰先進入回調