Promise用法

我們在使用函數的時候經常需要在函數的參數傳入另外一個函數,一層一層傳遞,很容易造成回調地獄,這樣的代碼不利於維護;

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
發佈了206 篇原創文章 · 獲贊 7 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章