Promise是异步编程解的一种解决方案。
Promise有三种状态:
1.pending(进行中)
2.resolved(已完成,又称Fulfilled)
3.rejected(未完成)
这三种状态一旦完成,就不会改变,任何时候都可以得到这个结果。Promise的状态改变只有两种可能,一:从‘pending’到‘resolved’(从进行时到成功)和二:从‘pending’到‘reject’(从进行时到失败)。
Promise对象的创建:
let 变量 = new Promise(function(resolve,reject){
resolve();//成功时调用的结果
});
简写的方式:
let 变量 = new Promise((resolve,reject) => {});
其中两个函数(resolve和reject)当作参数,是JavaScript提供的,不需要自己添加,也是固定的参数;
调用Promise需要使用then方法:
变量.then(参数){
console.log(参数)
};
还有一种Promise链式编程,即:
变量.then(参数){
console.log(参数);
}.then(参数){
console.log(参数);
};
(需要几个就写几个);
实例:
因时间原因而造成的无序执行,可以使用Promise让其按照排列顺序进行执行代码
/*创建Promise实例*/
let p1 = new Promise(function(resolve,reject){
setTimeout(() => {
/*如果未排序的情况下,会根据设置时间来显示console.log('异步1')的结果*/
console.log('异步1');
resolve('1.异步');
},3500);
});
let p2 = new Promise(function(resolve,reject){
setTimeout(() => {
/*如果未排序的情况下,会根据设置时间来显示console.log('异步1')的结果*/
console.log('异步2');
resolve('2.异步');
}, 800);
});
let p3 = new Promise(function(resolve,reject){
setTimeout(() => {
/*如果未排序的情况下,会根据设置时间来显示console.log('异步1')的结果*/
console.log('异步3');
resolve('3.异步');
},1500);
});
/*使用Promise链式编程进行实例调用,会让上面的value按照顺序排列显示*/
p1.then(function(value){
console.log(value);
return p2;
}).then(function(value){
console.log(value);
return p3;
}).then(function(value){
console.log(value);
return p1;
})
原因是:在 JavaScript 事件队列的当前运行完成之前,回调函数永远不会被调用。