文章目錄
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])
})