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的请求实例
// 基于Promise
const 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个接口发请求,哪一个访问最快就优先以谁处理