Promise
对象表示用于处理异步请求 和请求的成功
或者失败
。(简单点说就是 : 用同步一样的方式,来书写异步代码)。
异步:同时可以进行多个操作,每一个操作互不干扰
同步:同一个时刻只能做一件事情,做完了才能继续做
1.jQuery中的ajar实现异步请求
<script src="jquery-1.11.3.min.js"></script>
<script>
//1.发起异步请求
$.ajax({
url:'user.json', // url : user.json
dataType:'json', //预期服务器返回的数据类型
success:function (res) {
//2.处理成功的情况
console.log(res);
},
error:function (error) {
//3.处理失败的情况
console.log(error);
}
})
</script>
2. Promise 实现异步请求
1.新建Promise对象(接收一个匿名函数)
2.在匿名函数里面执行异步请求
3.使用匿名函数中的两个参数(resolve和reject)来处理成功和失败情况
4.在then函数中实现resolve和reject函数,并且处理结果
<script src="jquery-1.11.3.min.js"></script>
<script>
/**
* 1.promise 发起一个异步请求
* @type {Promise}
*/
var promise=new Promise(function (resolve,reject) {
$.ajax({
url:'user.json', // url
dataType:'json', //预期服务器返回的数据类型
success:function (res) {
//处理成功的情况
resolve(res);
},
error:function (error) {
//处理失败的情况
reject(error)
}
})
});
/**
* 2.promise处理请求的结果
* promise.then( , )
*/
promise.then(
//处理成功的情况 (这个函数是resolve函数的实现)
function (res) {
console.log(res);
},
//处理失败的情况(这个函数是reject函数的实现)
function (error) {
console.log(error);
});
</script>
3. Promise 同时实现多个异步请求
Promise中all
函数可以同时发起多个异步请求
<script src="jquery-1.11.3.min.js"></script>
<script>
/**
* 1.promise 发起一个异步请求
* @type {Promise}
*/
var promise1=new Promise(function (resolve,reject) {
$.ajax({
url:'user.json', // url
dataType:'json', //预期服务器返回的数据类型
success:function (res) {
//处理成功的情况
resolve(res);
},
error:function (error) {
//处理失败的情况
reject(error)
}
})
});
/**
* 1.promise 再发起一个异步请求
* @type {Promise}
*/
var promise2=new Promise(function (resolve,reject) {
$.ajax({
url:'goods.json', // url
dataType:'json', //预期服务器返回的数据类型
success:function (res) {
//处理成功的情况
resolve(res);
},
error:function (error) {
//处理失败的情况
reject(error)
}
})
});
/**
* 2.Promise 同时发起多个请求
*/
Promise.all([
promise1,
promise2
]).then(
//处理成功的情况 (代表所有请求同时成功)
function (res) {
//res是一个数组。多次请求的结果封装在res这个数组中
console.log(res);
},
//处理失败的情况(只有一个失败就会执行这里)
function (error) {
console.log(error);
});
</script>
4. Promise 同时实现多个异步请求简写
<script src="jquery-1.11.3.min.js"></script>
<script>
/**
* 1.Promise 同时发起多个请求
* 其实:$.ajax({url:'user.json',dataType:'json'})返回的是一个Promise对象
*
*/
Promise.all([
$.ajax({url:'user.json',dataType:'json'}), //相当与promise1
$.ajax({url:'goods.json',dataType:'json'})//相当与promise2
]).then(
//处理成功的情况 (代表所有请求同时成功)
function (res) {
//res是一个数组。多次请求的结果封装在res这个数组中
console.log(res);
},
//处理失败的情况(只有一个失败就会执行这里)
function (error) {
console.log(error);
});
</script>