什么是Promise?
- Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
- 从语法上说,promise是一个对象,从它可以获取异步操作的的最终状态(成功或失败)。
- Promise是一个构造函数,对外提供统一的 API,自己身上有all、reject、resolve等方法,原型上有then、catch等方法。
Promise的两个特点
-
Promise对象的状态不受外界影响
1)pending 初始状态
2)fulfilled 成功状态
3)rejected 失败状态
Promise 有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态
-
Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成fulfilled或者由pending变成rejected
创建promise
const promise = new Promise((resolve, reject) => {
// do something here ...
if (success) {
resolve(res); // 成功回调
} else {
reject(err); // 失败回调
}
});
function getData(){
let data = new Promise(function(resolve,reject){
//执行异步操作
});
return data;
}
function getMore(){
let data = new Promise(function(resolve,reject){
//执行异步操作
});
return data;
}
//...then.catch方法
getData.then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
//...all方法
Promise.all([getData(),getMore()]).then(function(res){
console.log(res)
});
async,await
function getData(){
let data = new Promise(function(resolve,reject){
//执行异步操作
});
return data;
}
function getMore(){
let data = new Promise(function(resolve,reject){
//执行异步操作
});
return data;
}
async function get(){
//串行
let data=await getData()//先等待第一个函数返回
let more=await getMore()//再等待第二个函数返回
//并行
let dataMore=await Promise.all([getData(),getMore()])
}