Promise是异步编程的一种解决方案,它是一个容器,里面保存着某个未来才结束的事件的结果。语法来说它还是一个对象,获取异步的操作信息,提供统一的API,各种异步操作都可以用同样的方法处理。
作用:使用Promise封装ajax(首先要用构造函数声明promise对象)
Promise有三种状态:
1.默认是pending(等待/进行中)
2.resolved(已完成),请求成功后返回的实例对象
3.rejected(已拒绝),请求失败后返回的实例对象
用一个案例描述使用Promise封装ajax
<script>
function promise(method, url, obj) {
return new Promise((reslove, reject) => {
// 封装ajax
let xhr = new XMLHttpRequest();
// 打开一个连接
xhr.open(method, url);
// 发送请求
xhr.send();
// 接收响应
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
// 代表请求成功
reslove(xhr.responseText)
} else {
// 代表请求失败
reject(xhr.responseText)
}
}
}
})
}
let p1 = promise('get', 'http://121.199.0.35:8887/index/carousel/findAll');
let p2 = promise('get', 'http://121.199.0.35:8888/index/article/findCategoryArticles');
let res = Promise.allSettled([p1, p2]);
console.log(res);
res.then(res => {
console.log(res);
})
</script>
实例方法:
then 执行请求成功的回调函数
可以接受两个参数
第一个参数 代表请求成功的回调函数
第二个参数 代表得请求失败的回调函数
catch 执行请求失败的回调函数
finally 无论执行成功与否都会执行的回调函数
Promise静态方法 参数 数组[存放多个实例对象]
all(); 实例状态全部成功 返回的承诺对象状态才是成功
any(); 实例状态任意一个成功 返回的承诺对象状态就是成功
race(); 实例状态返回请求先成功的那一个
allSettled(); 全部处理实例