#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)
}
}