promise对象中文意思可以直接理解为“承诺”
promise是一个用来传递未来即将发生的事件(通常为异步操作)的状态的一个对象,这个对象有很多的API,可以用来进一步处理异步操作响应之后的事情(处理数据)
promise的三个状态:
pending,Resolved,Rejected,分别代表进行中,已完成,已失败
promise特征及优缺点:
promise一旦执行,中途不会被中断,状态一旦发生变化就不会再次发生变化(“承诺”),其他的手段无法对其状态进行更改,它可以用同步的流程表达异步的操作,避免的异步回调层层嵌套的缺点,但是如果不为promise设置回调的话,promise内部会抛出错误,并且不会反应到外部,而且在pending状态是,无法得知进行到那个状态
promise接收一个回调函数,函数的参数为resolve和reject,他们是两个函数,resolve是promise对象从pending变为Resolved时调用,将异步操作的结果作为参数返回,同理,reject是异步操作失败的时候来调用
promise通过.then的形式来支持链式语法
var promise1 = function() {
return new Promise(function(resolve, reject) {
resolve("promise1执行成功")
});
};
var promise2 = function() {
return new Promise(function(resolve, reject) {
resolve("promise2执行成功")
});
};
promise1().then(function(data) {
console.log(data);
return promise2();
}).then(function (data) {
console.log(data);
});
promise1执行成功
promise2执行成功
all
Promise.all([promise1(),promise2()]).then(function (data) {
console.log(data);
})
["promise1执行成功", "promise2执行成功"]
promise中all,接收一个数组参数,数组中为n个promise,他们的返回值在.then中也是一个数组作为回调的参数
定义一个函数,入参为接口API站点和接口入参,函数返回值为一个promise对象
const postData = function(urls, params) {
return new Promise(function(resolve, reject) {
$.ajax({
url: urls,
type: 'post',
data: params,
dataType: 'json',
cache: false
}).then(function(data) {
resolve(data);
}, function(e) {
reject(e);
});
})
};
postData(ymAccountUrl + "/getShopAnnouncementList",{
ymOpenid: 'ozP1gs9Ql5W4HbbTrBDHNo0XcizU'
}).then(function (res) {
console.log(res); //处理数据
}).catch(function (res) { //抛出异常做出处理
console.log(res);
})