Promise.all返回结果是返回的第一个失败的Promise,如果所有都成功那么then函数中就会拿到一个数组,如果失败那么就会返回一个失败的Promise
Promise.race,谁最快我就抛出谁的Promise,不论成功失败。,Promise.race只返回失败跑的快的结果
<script>let p1 = Promise.resolve('成功1');let p2 = Promise.resolve('成功2');let p3 = Promise.reject('失败3');let pAll = Promise.all([p1, p2]);console.log('pAll', pAll); //返回结果是返回的第一个失败的Promise,如果所有都成功那么then函数中就会拿到一个数组,如果失败那么就会返回一个失败的Promise// Promise.all应用场景比如有三个请求的结果同时需要展示在页面上,避免第一个请求回来了显示了然后第二个请求第三个请求仍然没有回来,页面不舒服的现象,那么此时我们就可以通过Promise.all去合并请求结果/*如果所有都成功那么就会返回一个数组,数组是所有成功的结果如果失败那么就返回失败的Promise结果 */const requestRace = () => {return new Promise((res, rej) => {setTimeout(() => {res('requestRace成功的请求回来了数据!')}, 1000);})}const requestRaceFail = () => {return new Promise((res, rej) => {setTimeout(() => {rej('请求超时,请尝试重新刷新页面!')}, 3000);})};const requestRaceFail4 = () => {return new Promise((res, rej) => {setTimeout(() => {res('请求超时,请尝试重新刷新页面4!')}, 1000);})};// 一般race方法是用来做计时器的判断的,判断接口是否超时。,谁最快我就抛出谁的Promise,不论成功失败。,Promise.race只返回失败跑的快的结果let pRace = Promise.race([requestRace(), requestRaceFail()]); //这个往往数组里面只允许传两个参数,一个是用来计时的设置多少秒算超时,如果超过秒数就返回超时。console.log('pRace', pRace);pRace.then(res => {console.log('res', res);}).catch(rej => {console.log('rej', rej);});let pRaceJJ = Promise.race([requestRaceFail4(), requestRaceFail()]);console.log('pRaceJJ', pRaceJJ);
</script>