我們在使用函數的時候經常需要在函數的參數傳入另外一個函數,一層一層傳遞,很容易造成回調地獄,這樣的代碼不利於維護;
promise是個構造函數對象,解決了回調問題,它有三種狀態,pending(等待態),fulfiled(成功態),rejected(失敗態),常用到的方法則有 then,catch,all,race
promise是用來解決兩個問題的:
回調地獄,代碼難以維護, 常常第一個的函數的輸出是第二個函數的輸入這種現象
promise可以支持多個併發的請求,獲取併發請求中的數據
這個promise可以解決異步的問題,本身不能說promise是異步的
Promise的構造函數接收一個參數:函數,並且這個函數需要傳入兩個參數:
resolve :異步操作執行成功後的回調函數
reject:異步操作執行失敗後的回調函數
let p = new Promise((resolve,reject)=>{
setTimeout(function(){
var num = Math.ceil(Math.random()*10)
if(num<=5){
resolve(num)
}
else{
reject('數字太大了')
}
},1000)
})
p.then((data) => {
console.log('resolved',data);
})
.catch((err) => {
console.log('rejected',err);
})
return new Promise((resolve, reject) => {
axios.post(url, params)
.then(res => {
resolve(res.data)
})
.catch(err => {
reject(err.data)
})
})
post('/api/pc_v1/demo/hot/',param)
.then((data) => {
console.log(data.data)
commit('setHot', data.data.list)
commit('setPages', data.data.pages,{root:true})//root爲true時調用store中的mutations
commit('setLoading',false,{root:true})
})
.catch((err) => {
console.log(err)
})
return new Promise((resolve, reject) => {
post('/api/pc_v1/demo/login/',param)
.then((data) => {
commit('setUserinfo', data.data)
commit('setIsLogin',true,{root:true})//root爲true時調用store中的mutations
const token = data.data.token
token && localStorage.setItem("token",token)
resolve(data.data)
})
.catch((err) => {
reject(err.data)
})
})
https://juejin.im/post/5afe6d3bf265da0b9e654c4b