首先 Promise 有三种状态 pending(初始) fulfilled (实现) rejected (失败)
为什么呢?请看下面代码:
const promise1=new Promise((resolve,reject)=>{})
console.log(promise1)
当我们实例化一个对象之后,由下面图片可知,此promise1此时的状态为pending,因为我们还没有执行Promise中的resolve或reject
const promise2 = new Promise((resolve, reject) => {
resolve(1);
});
console.log(promise2);
当我们实例化一个对象并使用其回调函数的resolve参数之后,由下面图片可知,此promise2此时的状态为fulfilled.
const promise3 = new Promise((resolve, reject) => {
reject(2);
});
console.log(promise3);
当我们实例化一个对象并使用其回调函数的reject参数之后,由下面图片可知,此promise3此时的状态为rejected.
是不可变的。当promise进入fulfilled或rejected后状态不可改变
回调地狱如下:
当我们发起网络请求时,有可能需要一个请求的结果返回后再执行下一个请求,这样可能会形成回调地狱
$.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()
})
此方法用于将多个Promise实例包装成一个新的promise实例。它会等待数组中的各个Promise都执行成功后按顺序返回结果,如有一个不成功则执行不成功的promise的失败的结构
用法与.all()差不多,都是传入数组。但是.race()是先先返回结果就先执行谁
通过async await可使得Promise按顺序执行