2016-12-30 14 views
0

Вот происхождение код:Как я могу получить результат axios сначала, а затем отправить действие?

export function startGame() { 
    return function(dispatch) { 
     axios({ 
      method: 'post', 
      url: '/api/actions/game/', 
      data: {'game':'start'}, 
      headers: getHeaders(), 
     }) 
     .then(response => { 
      if(response.status===200){ 
      dispatch({ 
       type: TYPE.START_GAME, 
      }); 
      } 
     }) 
     .catch((error) => { 
      dispatch({ 
        type: TYPE.ERROR, 
       }); 
     }); 
    } 
} 

что я хочу, я получаю результат апи первым, а затем решить, что следующий шаг, который я хочу сделать (потому что у меня есть много действий, которые все называют один и тот же API)
моя логика ниже, но я не знаю, как заставить его работать
Пожалуйста, помогите мне

export function startGame() { 


    let result = function(dispatch) { 
     axios({ 
      method: 'post', 
      url: '/api/actions/game/', 
      data: {'game':'start'}, 
      headers: getHeaders(), 
     }) 
     .then(response => { 
      if(response.status===200){ 
      return { 
       "result" : "OK", 
       "data" : response.data 
      } 
      } 
     }) 
     .catch((error) => { 
      return { 
       "result" : "FAIL", 
       "data" : error 
      } 
     }); 
    } 


    if result.result === "OK" { 
     dispatch(someAction()) 
    }else{ 
     dispatch(otherAction()) 
    } 


} 

ответ

0

Я не знаю, почему вы не можете просто отправить вам someAction и otherAction в ваших AXIOS обратных вызовов. Почему это не работает для вас?

export function startGame() { 
     return function(dispatch) { 
     axios({ 
      method: 'post', 
      url: '/api/actions/game/', 
      data: {'game':'start'}, 
      headers: getHeaders(), 
     }) 
     .then(response => { 
      if (response.status === 200) { 
      dispatch(someAction(response.data)); 
      } 
     }) 
     .catch((error) => { 
      dispatch(otherAction(error)); 
     }); 
    } 
} 

Если вы хотите, чтобы определить функцию вызывающего API в другом месте, вы можете сделать это:

// In some other file, say api.js 
export function startGameApiCall() { 
    return axios({ 
    method: 'post', 
    url: '/api/actions/game/', 
    data: {'game':'start'}, 
    headers: getHeaders(), 
    }); 
} 

// In your actions file 
import { startGameApiCall } from './api'; 

export function startGame() { 
    return function (dispatch) { 
    startGameApiCall() 
     .then(response => dispatch(someAction(response.data))) 
     .catch(() => dispatch(otherAction())); 
    } 
} 
+0

Большое вам спасибо, это то, что я хочу – user2492364