Promise
基本使用
new Promise((resolve,reject)=>{
resolve()
}).then(()=>{})
<script>
setTimeout(()=>{
console.log('Hello World');
},1000)
//参数->函数(resolve,reject)
//resole,reject本身也是函数
new Promise((resolve,reject)=>{
//第一次请求
setTimeout(()=>{
resolve();
},1000)
}).then(()=>{
//第一次结果处理
console.log('Hello World');
return new Promise((resolve,reject)=>{
//第二次请求
setTimeout(() => {
resolve();
}, 1000);
}).then(()=>{
//第二次结果处理
console.log('Hello');
return new Promise((resolve,reject)=>{
resolve();
}).then(()=>{
console.log('HHH');
})
})
})
</script>
处理请求的数据
new Promise((resolve,reject)=>{
resolve(data);
reject(err)
}).then((data)=>{
//处理数据
}).catch(err=>{
//处理错误
})
Promise三种状态
pending
:等待状态,比如正在进行网络请求或定时器没有到时间
fulfill
:满足状态,当主动回调了resolve时,就处于该状态,并且会回调.then()
reject
: 拒绝状态,当主动回调了reject时,就处于该状态,并且会回调.catch()
另类写法
//结构,函数1为处理请求成功的函数,函数2为处理请求失败的函数
new Promise((resolve,reject)=>{
resolve('ff');
reject('ddd');
}).then(函数1,函数2)
//案例
new Promise((resolve,reject)=>{
// resolve('resolve');
reject('reject');
}).then(data=>{
//处理正确请求
console.log(data);
},err=>{
//处理错误请求
console.log(err)
})
Promise的链式调用
return new Promise((resolve,reject)=>{reslove(res+'111')})
等价于 return Promise.resolve(res+'111')
等价于 return res+'111'
<script>
new Promise((resolve,reject)=>{
setTimeout(() => {
resolve('aaa')
}, 1000);
}).then(res=>{
//1:自己处理
console.log(res,'第一层的处理代码')
//2:第一种简写
return res+'122';
}).then(res=>{
console.log(res, '第二层的处理')
//第二种简写
return Promise.resolve(res+'111')
//请求错误时,第一种
return Promise.reject('error')
//第二种,手动抛出异常
throw 'error message'
}).then(res=>{
console.log(res,'第三层')
}).catch(err=>{
console.log(err)
})
</script>