什么是promise:
Promise是异步编程的解决方案(网络请求)
什么时候用promise:
当进行异步操作时可以使用promise,对即将进行的异步操作进行封装。
具体作用是什么:
就是把异步请求的代码和处理的代码分离开,结构更加清晰。多层异步请求处理时,可实现为链式编程,责任结构清晰。
promise基本使用使用举例:
new Promise((resolve, reject) => {
// 放入异步请求
setTimeout(() => {
// 请求成功时使用resolve传入下一步要处理的数据
resolve('hello world');
// 请求失败时使用reject传入错误信息
reject('error message');
}, 1000)
}).then((data) => {
// 对异步请求成功得到数据的处理代码
console.log(data);
// 若在获取数据之后还需要进行异步请求
// 可在then函数中再new一个promise类
// new Promise()
}).catch((err) => {
// 对异步请求失败的信息进行处理
console.log(err);
});
// 也可将catch放入到then当中处理,即上面四行替换为如下
// }, (err) => {
// // 对异步请求失败的信息进行处理
// console.log(err);
// });
Promise的链式调用
Promise是封装的一个类
多个异步请求完成后进行回调
之前没有使用promise
代码:
let isResult1 = false;
let isResult2 = false;
$ajax({
url: 'URL1',
success: function () {
console.log('结果1');
isResult1 = true;
handleResult();
}
});
$ajax({
url: 'URL2',
success: function () {
console.log('结果1');
isResult1 = true;
handleResult();
}
});
function handleResult() {
if(isResult1 && isResult2){
console.log('可以做接下来的请求');
}
}
使用promise all方法的使用
传入可迭代对象(可以传入数组,但又不仅仅可以传入数组)
代码:
promise.all([
new Promise((resolve, reject) => {
$ajax({
url: 'URL1',
success: function (data) {
resolve(data);
}
})
}),
new Promise((resolve, reject) => {
$ajax({
url: 'URL2',
success: function (data) {
resolve(data);
}
})
}),
// 此处的results是保存之前ajax请求返回数据的数组
]).then(results => {
// URL1的数据
console.log(results[0]);
// URL2的数据
console.log(results[1]);
});