1. Promise有几种状态?
为什么呢?请看下面代码:
pending状态
const promise1=new Promise((resolve,reject)=>{})
console.log(promise1)
当我们实例化一个对象之后,由下面图片可知,此promise1此时的状态为pending,因为我们还没有执行Promise中的resolve或reject
fulfilled状态
const promise2 = new Promise((resolve, reject) => {
resolve(1);
});
console.log(promise2);
当我们实例化一个对象并使用其回调函数的resolve参数之后,由下面图片可知,此promise2此时的状态为fulfilled.
rejected状态
const promise3 = new Promise((resolve, reject) => {
reject(2);
});
console.log(promise3);
当我们实例化一个对象并使用其回调函数的reject参数之后,由下面图片可知,此promise3此时的状态为rejected.
2.Promise的状态是否可改变?
3.Promise如何解决地域回调?
回调地狱如下:
当我们发起网络请求时,有可能需要一个请求的结果返回后再执行下一个请求,这样可能会形成回调地狱
$.get("/getUser",function(res){
$.get("/getUserDetail",function(){
$.get("/getCart",function(){
$.get("/getBooks",function(){ //...
})
})
})
})
而promise的then方法就很容易去解决回调地狱
function request1()
{
return new Promise((resolve,reject)=>resolve(1));
}
function request2()
{
return new Promise((resolve,reject)=>resolve(2));
}
function request3()
{
return new Promise((resolve,reject)=>resolve(3));
}
request1().then(v=>{
return request2()
}).then(v={
return request3()
})
4.Promise有哪些方法?
Promise.all()
此方法用于将多个Promise实例包装成一个新的promise实例。它会等待数组中的各个Promise都执行成功后按顺序返回结果,如有一个不成功则执行不成功的promise的失败的结构
Promise.race()
用法与.all()差不多,都是传入数组。但是.race()是先先返回结果就先执行谁
5. 如何让Promise顺序执行?
async await
通过async await可使得Promise按顺序执行