2017-10-18 1 views
0

私のコンポーネントの中から2つのアクションを呼び出す必要がありますが、最初のものが100%完了した後でなければなりません。Vue - 最初のものが終了した後にのみ非同期アクションを呼び出す

私はこれをしようとしているが、それは

mounted() { 
    this.$store.dispatch('coinModule/loadApiCoins') 
     .then(() => { 
      this.$store.dispatch('coinModule/loadUserCoins') 
     }) 
     .catch(error => { 
      console.log(error) 
     }); 
}, 

機能しないと2つのアクションは、これらが他の方法で回避する必要がありますこれらの

loadApiCoins({ commit, dispatch, rootGetters }) { 
     Vue.axios({ 
       method: 'get', 
       url: 'https://api.coinmarketcap.com/v1/ticker/', 
       transformRequest: [(data, headers) => { 
        delete headers.common.Authorization 
        return data 
       }] 
      }) 
      .then(response => { commit('SET_API_COINS', response.data) }) 
      .catch(error => { console.log(error) }) 
    }, 

    loadUserCoins({ commit, dispatch, rootGetters }) { 
     Vue.axios.get('http://127.0.0.1:8000/api/coins/') 
      .then(response => { 
       commit('SET_USER_COINS', response.data) 
       commit('SET_USER_PORTFOLIO_OVERVIEW') 
      }) 
      .catch(error => { console.log(error) }) 
    } 

です。 Screen of my network tab

答えて

0

アクションをディスパッチすると、デフォルトではthenコールバックがありません。アクションがPromiseを返した場合にのみそうです。 axios.getコールはPromiseを返す必要がありますが、その操作では返されません。あなたはそれを返すだけでthenコールバックがmountedフックで発生します。

loadApiCoins({ commit, dispatch, rootGetters }) { 
    return Vue.axios({ 
    method: 'get', 
    url: 'https://api.coinmarketcap.com/v1/ticker/', 
    transformRequest: [(data, headers) => { 
     delete headers.common.Authorization 
     return data 
    }] 
    }) 
    .then(response => { commit('SET_API_COINS', response.data) }) 
    .catch(error => { console.log(error) }) 
}, 
+0

コードは私のものと同じように見えます。どのように私は斧で約束を返すのですか?私は "それでは()"が約束だと思った...? –

+0

私の悪い。私はちょうど何かの前に "リターン"を追加したのを見た。そうですか?私は非常に混乱しています。 –

+0

右。つまり、 'promcheise = this。$ store.dispatch( 'coinModule/loadApiCoins')'のように 'dispatch'呼び出しの戻り値を' mounted'フックに保存したとします。あなたのコードでは、 'loadApiCoins'アクションは何も返さないので、' promise'は 'undefined'になり、' promise.then(()=> {}) 'はエラーになります。それで '$ store.dispatch( 'coinModule/loadApiCoins')、then(()=> {})'は動作しません。結果のディスパッチコールの値は 'undefined 'です。 'Vue.axios'呼び出しから得られた' Promise'を明示的に返す必要があります。 – thanksd

関連する問題