文章目录
1. Promise有什么作用?
Promise用于异步操作(常用于将数据请求与数据处理分开),防止陷入无限回调(回调地狱)
2. Promise三种状态
- pending:等待状态,比如进行网络请求,或者定时器没有到时间
- fulfill:满足状态,当我们主动回调resolve时,且会回调.then()
- reject:拒绝状态,当我们主动回调了reject时,且会回调.catch()
3. Promise两种写法
1. then catch
new Promise((resolve, reject) => {
//resolve('hello') 只能调用一个
reject('error')
}).then((data)=>{
console.log(data);
}).catch((err)=>{
console.log(err);
})
2. 写在一个then中
new Promise(((resolve, reject) => {
//resolve('hello') 只能调用一个
reject('error')
}).then(data => {
console.log(data);
}, error => {
console.log(error);
}))
4. 链式调用
1. return Promise.resolve()
new Promise((res,rej)=>{
setTimeout(()=>{
res('aa')
},1000)
}).then(res=>{
console.log(res, '第一次')
return Promise.resolve(res+ '111')
}).then(res=>{
console.log(res, '第二次')
return Promise.resolve(res+ '22')
}).then(res=>{
console.log(res, '第三次')
}).catch(err=>{
console.log(err)
})
2. return
new Promise((res,rej)=>{
setTimeout(()=>{
res('aa')
},1000)
}).then(res=>{
console.log(res, '第一次')
return res+ '111'
}).then(res=>{
console.log(res, '第二次')
return res+ '22'
}).then(res=>{
console.log(res, '第三次')
}).catch(err=>{
console.log(err)
})
5. Promise.all
Promise.all([
new Promise(res=>{
setTimeout(()=>{
console.log('success1')
res()//只有两个成功才能执行then
},1000)
}),
new Promise(res=>{
setTimeout(()=>{
console.log('success2')
res()
},2000)
})
]).then(res=>{
console.log('success all')
console.log(res)
console.log(res[0])
console.log(res[1])
})