1.Promise对象调用ajax函数封装
这里因为url,method,data这些形参的名字跟本来的ajax函数内的属性的属性名相同,所以这里可以把’属性名:属性值,’ 简写成 ‘属性名,’
//封装Promise对象,方便异步操作 类似myAjax
function send(url,method,data){
//return promise对象
return new Promise((resolve,reject)=>{
$.ajax({
//因为属性名跟变量名一样了,所以本来是url:url,这样写的,但是变量名跟形参名一样就可以写成url,
url,
method,
data,
success(res){
resolve(res);
},
error(err){
reject(err);
}
})
});
}
以上是用Promise对象调用ajax函数,并对其进行封装,下面用例子来说明具体用法
// send('http://39.97.103.246:8888/manager/category/findAllCategory','get',{})
// .then((res)=>{
// console.log(res);
// })
// .catch((err)=>{
// console.log(err);
// });
// send('http://39.97.103.246:8888/manager/article/findArticle','get',{page:0,pageSize:10})
// .then((res)=>{
// console.log(res);
// })
// .catch((err)=>{
// console.log(err);
// })
// 生成两个Promise对象 p1 , p2
let p1 = send('http://39.97.103.246:8888/manager/category/findAllCategory','get',{});
let p2 = send('http://39.97.103.246:8888/manager/article/findArticle','get',{page:0,pageSize:10});
变量等于声明并且封装好的send函数,这样得到的是一个Promise对象,接着对promise对象进行合并成数组的操作
// all是等待 合并p1,p2结果,把结果都放在p3中,无论谁先完成,都要等另一个完成才会执行p3的then或catch,且只有两个都成功了,p3才会成功,两个有一个失败,p3都是失败
// let p3 = Promise.all([p1,p2]);
// p3.then((res)=>{
// console.log(res,'---');
// }).catch((err)=>{
// console.log(err,'+++');
// })
//race是赛跑 比较几个对象之间谁最先完成就用谁的数据,这里仅比较了两个对象p1,p2的
let p3 = Promise.race([p1,p2]);
p3.then((res)=>{
console.log(res,'---');
}).catch((err)=>{
console.log(err,'+++');
})
race方法是返回传入的几个对象中最先先完成自己的全部代码的对象,比如p1先完成了,p3就等于p1对象,这里比较的对象不仅限于两个,可以是很多个