这两个方法,都是并行执行多个异步操作。而不同的是,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) })
谁先执行结束,谁先进入回调