需求:两个异步请求同时请求远程接口,并对两个接口返回的数据进行处理
可以通过 es6的 Promise.all 进行处理
function request1_fun(time) {
return new Promise(resolve => {
setTimeout(() => {
let time = new Date().getTime()
console.log("request1_fun, time:"+time)
resolve(time)
}, time)
})
}
function request2_fun(time) {
return new Promise(resolve => {
setTimeout(() => {
let time = new Date().getTime()
console.log("request2_fun, time:"+time)
resolve(
{name:"hugo"}
)
}, time)
})
}
const startTime = new Date().getTime()
console.log("request start time:"+startTime)
let request1 = request1_fun(3000)
let request2 = request2_fun(2000)
//合并两个请求的结果,等待两个请求都完成后才执行then
Promise.all([request1, request2])
.then(res => {
let time = new Date().getTime()
console.log("merge, time:"+time) //时间为最后一个执行的请求的时间
console.log("请求1的结果:"+res[0])
console.log("请求2的结果:"+res[1].name)
})
console.log("aaa") //主线程将会率先执行完