Отправка различных действий с несколькими запросами ax ios - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть метод get, отправляющий разные запросы, и я хочу отправить действие для любого отправляемого мной запроса.

См. Соответствующий код

export function getTeamsStats(league, team, type) {
  return function(dispatch) {

    let url1 = "https://www.api-football.com/demo/api/v2/statistics/891/490/2020-01-09"
    let url2 = "https://www.api-football.com/demo/api/v2/statistics/891/490/2020-02-09"
    let url3 = "https://www.api-football.com/demo/api/v2/statistics/891/490/2020-03-09"

    let urlArray = [url1,url2,url3]

    let promiseArray = urlArray.map(url => axios.get(url));

    const api = true;

    if (api) {
      return axios({
        method: "get",
        headers: {
          "x-rapidapi-host": "api-football-v1.p.rapidapi.com",
          "x-rapidapi-key": ""
        }
      })
      .all(promiseArray)
      .then(res => {
        const {
          matchsPlayed: { home: teamsMatchsPlayedHome, away: teamsMatchsPlayedAway},
          wins: { home: teamsStatsWinHome, away: teamsStatsWinAway },
          draws: { home: teamsStatsDrawHome, away: teamsStatsDrawAway },
          loses: { home: teamsStatsLoseHome, away: teamsStatsLoseAway }
        } = res.data.api.statistics.matchs;
        const teamStats = {
          teamsMatchsPlayedHome,
          teamsMatchsPlayedAway,
          teamsStatsWinHome,
          teamsStatsWinAway,
          teamsStatsDrawHome,
          teamsStatsDrawAway,
          teamsStatsLoseHome,
          teamsStatsLoseAway
         }
        dispatch(receivedTeamsStat(teamStats, type));

Для любого из этих 3 URL-адресов я хочу сделать эту рассылку dispatch(receivedTeamsStat(teamStats, type));

Я смог сделать то же самое dispatch с помощью всего лишь одного URL-запроса и получить информацию о состоянии, но сейчас я не знаю, как добиться того же, делая dispatch за каждый URL.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Этот лог c может вам помочь. Вы можете использовать forEach в .then()

.then( res => res.forEach( result => dispatch({type: FETCH_DATA_SUCESS, payload:  result.data}))

Внутри:

...

if (api) {
  return axios({
    method: "get",
    headers: {
      "x-rapidapi-host": "api-football-v1.p.rapidapi.com",
      "x-rapidapi-key": ""
    }
  })
  .all(promiseArray)
  .then( res => {
        ...

        res.forEach( result => dispatch({type: FETCH_DATA_SUCESS, payload:  result.data}))

        ...
  })

  ...
0 голосов
/ 11 апреля 2020

Вы можете инициализировать состояние

this.state={
  myArray:[]
}

Для каждого вызова API можно изменить состояние следующим образом

get('URL').then((res)=>{
    //Some extra code here to create object to be appended and maybe to check if the get was successfull
    let x = this.state.myArray;
    x.push(object);
    this.setState(x);
})

Что касается даты,

...