2017-10-18 11 views
0

두 번째 작업은 내 구성 요소에서 호출해야하지만 두 번째 작업은 첫 번째 작업이 100 % 완료된 후에 시작해야합니다.Vue - 첫 번째 작업이 완료된 후에 만 ​​비동기 작업을 호출하십시오.

나는이 노력하고있어하지만

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

작동하지 않고이 작업은이

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을 반환해야하지만 조치로 반환하지는 않습니다. 당신은 단지 그것을 돌려 보내야하고 mounted 후크에서 then 콜백이 발사 될 것입니다.

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

오른쪽. 그래서'dispatch' 호출의 반환 값을'let promise = this. $ store.dispatch ('coinModule/loadApiCoins')'와 같이'mounted' hook에 저장했다고 가정 해 봅시다. 당신의 코드에서,'loadApiCoins' 액션은 아무것도 반환하지 않으므로'promise'는'undefined'가되고'promise.then (() => {})'는 에러가됩니다. 이것이 $ store.dispatch ('coinModule/loadApiCoins'), then (() => {})'이 작동하지 않는 이유입니다. 디스패치 호출의 결과 값은'undefined '입니다. 'Vue.axios' 호출에서 결과'Promise'를 명시 적으로 리턴해야합니다. – thanksd