как выполнить функцию после завершения другой в react native?

#react-native

#реагировать-родной #react-native

Вопрос:

У меня есть запрос о том, что у меня есть функция, которая отвечает серверу, поэтому это занимает некоторое время, и когда она пытается выполнить другую функцию, возникает ошибка. Поскольку функция отвечает на массив, который поступает с сервера, и когда другая функция запрашивает это, даже у нее этого нет. Нужно решить это. пример :

 responseServer(tarea) {
     return fetch(url)
      .then((response) => response.json())
      .then((responseJson) => {
        this.setState({ refresh: false })
        global.refresh = false
        let data = [];
        let Milestone = [];

        Object.values(responseJson.summary).forEach(item => {
          data = data.concat(item);
        });

        const result = ["Milestone"]
          .reduce((total, category) => ({
            ...total,
            [category]: data.filter(line => line.includes(category)) 
          }), {})

        Object.values(result.Milestone).forEach(item => {
          Milestone = Milestone.concat(item)
        });

        this.setState({
          Milestone: Milestone
        })
      })
}
  

и еще одна функция

 sacarPorcentaje(item) {
 this.responseServer(item)
 let summaryCopy = this.state.Milestone.map(data => {return data.split(",")})
      console.log(summaryCopy)
      var Okeys = 0;
      var total = 0;
      for (var i = 0; i < summaryCopy.length; i  ){
        for(var j = 0; j < summaryCopy[i].length; j  ){
          if(summaryCopy[i][j] === "OK") {
            Okeys = Okeys   1
          }
        }
        total = total   1 
      }
      console.log(Okeys)
      console.log(total)
}
  

Комментарии:

1. извините за мой английский

Ответ №1:

Вы должны обновить sacarPorcentaje() до async функции. затем await вызов функции решит вашу проблему

 async sacarPorcentaje (item) {
 await this.responseServer(item)
 let summaryCopy = this.state.Milestone.map(data => {return data.split(",")})
      console.log(summaryCopy)
      var Okeys = 0;
      var total = 0;
      for (var i = 0; i < summaryCopy.length; i  ){
        for(var j = 0; j < summaryCopy[i].length; j  ){
          if(summaryCopy[i][j] === "OK") {
            Okeys = Okeys   1
          }
        }
        total = total   1 
      }
      console.log(Okeys)
      console.log(total)
}
  

Существует также еще одно решение этой проблемы. пожалуйста, найдите, как использовать Promise в JS

Ответ №2:

Я думаю, вам нужно использовать then при вызове responseServer функции в sacarPorcentaje функции.

 sacarPorcentaje(item) {
 this.responseServer(item).then(() => {
 let summaryCopy = this.state.Milestone.map(data => {return data.split(",")})
      console.log(summaryCopy)
      var Okeys = 0;
      var total = 0;
      for (var i = 0; i < summaryCopy.length; i  ){
        for(var j = 0; j < summaryCopy[i].length; j  ){
          if(summaryCopy[i][j] === "OK") {
            Okeys = Okeys   1
          }
        }
        total = total   1 
      }
      console.log(Okeys)
      console.log(total)
   }
}