在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 組件中dispatch某個action方法后,后邊的操作同步進行但后邊的操作用到

組件中dispatch某個action方法后,后邊的操作同步進行但后邊的操作用到了action的變量,但是這個變量當時沒有值,

我在action中通過ajax獲取接口數據,然后commit到mutation去改變state是我ajax獲取的某個數據;然后在aa.vue組件中mounted周期函數中dispatch這個action;同時dispatch這個action的后面有一些操作;用到laction中獲得的數據(比方叫detailDate)我也在computed中對這個detailDate進行了注冊(mapstate);但是我dispatch這個action后邊的操作用到 detailDate的時候不是我通過action中接口獲得的值;而是一開始在定義state中的空字符串;我感覺是請求接口有延時而且是異步請求;我dispatch這個action后邊的操作和請求同時進行;即便我用到那個detailDate也是沒有重新通過mutation更新后的值;

我應該怎樣做;才能保證我dispatch這個action后邊的操作用到的detailDate的值是mutation中更新后的值呢? 我是在dispatch的時候傳一個回調函數??還是用watch去監(jiān)聽detailDate這個變量變化的時候再去做我的操作呢?雖然這兩種方式我都試過;但是我覺得都不是很好(是不是真的不好我就不知道了,只是個人覺得,因為我感覺既然設計了vuex出來,這樣簡單的問題不應該沒有特定的解決辦法,可能我不知道),所以請問下,哪中操作去解決這個問題比較好呢?

回答
編輯回答
生性

你的action操作應該return出來一個Promise,然后當接口請求完成后resolve(),組件里的.then()再執(zhí)行操作。

actions 代碼:

const getUserAuth = ({commit}) => {
  return new Promise(async (resolve, reject)=>{
    const res = await http.post('adminMenu', {});
    if (res === null) return;
    commit('SET_USER_AUTH', res.param.auth);
    commit('SET_SIDE_NAV', res.param.nav);
    resolve() // 接口請求完成
  })
};

組件內代碼:

this.$store.dispatch('getUserAuth').then(()=>{
  // 接口請求完成后
})

其實也應當配合加載動畫來使用的。

2017年7月16日 12:26