Promise.all()
Promise.all([Promise数组:「要求数组中的每一项尽可能都是Promise实例」]):返回一个新的Promise实例AA,
AA成功还是失败,取决于数组中的每一个Promise实例是成功还是失败,只要有一个失败,AA就是失败的,只有都成功AA才是成功的。
使用场景:并行,初始化同时发送多个请求,等所有信息都请求回来后,做处理
并行:10个请求都成功后,在做处理叫并行,速度快
串行:第一个请求成功才能发第二个,第二个请求成功后才能发第三个
function fn(interval){return new Promise((resolve, reject)=>{setTimeout(()=>{resolve(interval)},interval)})}let p1 = fn(3000)let p2 = fn(1000)let p3 = Promise.resolve(0)Promise.all([]).then(result =>{// 不论谁先知道状态,最后结果的顺序和传递数组的顺序保持一致console.log(result)}.catch(reason =>{// 处理过程中,遇到一个失败,则all立即为失败,结果就是当前实例失败的原因console.log(reason)}))// 需求实例:// api1,api2,api3 api1的返回结果作为api2的的请求实例,api2作为api3的请求实例// 基于Promiseconst api1 = () =>{return new Promise(resolve =>{$.ajax({url: '/api1',auccess(result1){resolve(result1)}})})}const api2 = () =>{return new Promise(resolve =>{$.ajax({url: '/api2',auccess(result2){resolve(result2)}})})}const api2 = () =>{return new Promise(resolve =>{$.ajax({url: '/api2',auccess(result3){resolve(result3)}})})}// 串行请求api1.then(result1 =>{return api2()}).then(result2 =>{retuen api3()}).then(result3 =>{})// 并行请求Promise.all([api1(), api2(), api3()]).then(result =>{})// es7 async await 串行 异步请求(async function(){let result1 = await api1();let result2 = await api2();let result3 = await api3();})()
Promise.race
最先知道状态的Promise实例是成功还是失败,决定了AA是成功还是失败
使用场景:需要向10个接口发请求,哪一个访问最快就优先以谁处理
