Функции не выполняют свою задачу правильно

#javascript #reactjs #react-native

#javascript #reactjs #react-native

Вопрос:

У меня есть вопрос, потому что я не понимаю, почему мои функции не дают мне правильных результатов.

У меня есть основная функция stopClick() , в которой я запускаю две другие функции, они похожи, но я передаю два разных массива и создаю два разных массива :

this.timestampCheckDestro(this.props.arrayTimestampDestro) дай мне tempoRealeDestro
this.timestampCheckDestro(this.props.arrayTimestampDestro) дай мне tempoRealeSinistro

Из полученных результатов я заметил, что функция, которая запускается первой, способна заполнить массив до определенной точки, а затем заполнить его значениями NaN. Напротив, второй массив либо состоит только из NaN, либо начальные позиции равны NaN, а конечные заполнены значениями.

Мой код таков:

 async stopClick(){
  //Code...
   await this.timestampCheckDestro(this.props.arrayTimestampDestro);
   await this.timestampCheckSinistro(this.props.arrayTimestampSinistro);
  //Actions to another function. (after I have the array populated from the two functions)
}

async  timestampCheckDestro( timestampDestro ){
   //declare variable
  for( let i = 0; i < timestampDestro.length; i  ){
       diffDestro = (( baseDestro   timestampDestro[i] ) - this.contatoreDestro )
    this.tempoRealeDestro.push(diffDestro)
  } 
 }

async timestampCheckSinistro( timestampSinistro ){
   //declare variable
  for( let i = 0; i < timestampSinistro.length; i  ){
       diffSinistro = (( baseSinistro   timestampSinistro[i] ) - this.contatoreSinistro )
    this.tempoRealeSinistro.push(diffSinistro)
  } 
 }
  

Теперь мой вопрос:
Я не знаю, правильно ли я использовал async / await или бесполезен в задаче такого типа, в любом случае я хотел бы понять, как выполнить две функции и только когда они завершат все операции, продолжить выполнение функции.

Спасибо

Редактировать:

 constructor(props){
    super(props);
    this.state = {
      loading: true
    };
   //....

    this.tempoRealeDestro = [];
    this.tempoRealeSinistro = [];
}

dataReceived(){
    this.dimensioneArrayRaggiunta = this.props.dimensioneArrayRaggiunta;
     if(this.checkContatore == false){
       this.contatoreDestro = this.props.contatoreTimestampDestro;
       this.contatoreSinistro = this.props.contatoreTimestampSinistro;
       this.checkContatore = true;
     }
 this.stopClick();
}
  

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

1. вы в основном использовали async / await там, где это не нужно — ничего асинхронного и вообще никаких обещаний — ваша проблема заключается в неправильном обращении с daya в this.props.arrayTimestamp * и любыми другими свойствами (this.contatero *)

2. async/await просто для упрощения обработки обещаний. Ваш код не асинхронный, он линейный. Так что в async/await вообще нет необходимости.

3. Хорошо, на самом деле я получаю те же результаты, что и когда я их не использовал. Но как вы думаете, что я мог бы сделать для достижения этого?

4. Почему бы вам не поставить консоль. войдите в циклы for и выясните, что такое значение NaN? Я думаю, что arrayTimestampDestro или arrayTimestampSinistro содержат в нем значения NaN.

5. @NhutDinhBa Привет и спасибо за ваш ответ, arrayTimestampDestro и arrayTimestampSinistro заполнены правильно. Что я заметил, так это то, что: например, arrayTimestampDestro и arrayTimestampSinistro имеют длину 30, поэтому tempoRealeDestro для первых 15 имеют значение, остальные 15 равны NaN, в то время как для tempoRealeSinistro первые 15 равны NaN, последние 15 имеют значение