搜尋

首頁  >  問答  >  主體

javascript - 為什麼我呼叫vuex中的mutation方法,得到的卻是非同步執行

我在一個子元件中methods裡有一個點擊函數

takehash(index){
                   let hash = this.searchList[index].hash;
                   this.$store.commit('playvideo', hash);
                   console.log(this.$store.state.box.Url);
           }

store的mutations裡有一個方法

playvideo(state,hash){
                   Vue.http.get("json.php"+hash).then(res=> {
                           let jsonObj = res.data;
                        state.box.Url= jsonObj.url;
                        console.log('no');
                   });
            }

但是我發現我想要的過程是commit playvideo方法後,執行playvideo方法後,console出來他的url,
但是結果卻是先console出來url,然後才執行playvideo方法,mutations不是同步方法嗎,為什麼會延遲執行,我剛接觸vuex,求大神解決

PHP中文网PHP中文网2737 天前547

全部回覆(2)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-05-18 10:52:21

    理論上mutations只用來放同步的方法.而不能使用異步.
    而你的playvideo裡面放了個非同步方法.
    那執行結果肯定是異步啊.

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-18 10:52:21

    mutations不是同步方法嗎

    mutations 同步的意思是你要確保 mutations 裡的方法是同步的,並不是 mutations 把你非同步的方法變成同步。

    非同步方法放在 actions 裡

    回覆
    0
  • 取消回覆