Promise是一个构造函数
三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败),fulfilled和rejected都是由pending改变,一旦状态改变,就不会再变。
Pormise.race:
参数是数组:Pormise.race([])
用途:可在网络请求延迟使用做提示。
不管失败还是成功,谁先执行完成就返回谁
var p1 = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('执行操作1');
},3000)
});
var p2 = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('执行操作2');
},2000)
});
var p3 = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('执行操作3');
},1000)
});
let pRace = Promise.race([p1,p2,p3])
console.log(pRace) //返回操作3
//p1,p1,p3中任意一个,最新改变的状态就是pRace的返回值
Promise.race([]).then(value=>{}).catch(error=>{})
Pormise.all:
参数可以不是数组,但是必须是iterator
用途:等待多个请求成功的结果,再一起渲染页面
成功的返回值是一个数组
var p1 = new Promise(function(resolve,reject){
resolve('操作1执行成功')
});
var p2 = new Promise(function(resolve,reject){
reject('操作2执行失败')
});
var p3 = new Promise(function(resolve,reject){
resolve('操作3执行成功')
});
let pAll = Promise.all([p1,p2,p3])
console.log(pAll) //提示p2执行失败
pAll的状态由p1,p2,p3请求的状态决定,三个都是成功,才会成功。
如果任意一个失败,pAll的状态就是失败,如p2和p3都是失败,只返回p2的失败的结果
var p1 = new Promise(function(resolve,reject){
resolve('操作1执行成功')
});
var p2 = new Promise(function(resolve,reject){
reject('操作2执行成功')
}).catch(error =>console.log(error))
var p3 = new Promise(function(resolve,reject){
resolve('操作3执行成功')
});
let pAll = Promise.all([p1,p2,p3])
console.log(pAll) //[操作1执行成功,undefined,操作3执行成功]
pAll.then(value=>{
//全部请求成功后。。。。。
console.log(value) //[操作1执行成功,undefined,操作3执行成功]
}).catch(error=>
p2未做catch时,使用all,任何一个失败都会在此返回
console.log(error))
若p2单独设置了catch,那么p2是reject时,不会触发pAll的catch
获取当前url并重新加载
location.replace(location.href)