Определить конец функции asyn c внутри для l oop in JavaScript - PullRequest
0 голосов
/ 05 мая 2020

Я хочу определить конец функции asyn c внутри for l oop in JavaScript.

Мой код:

  for (var i = 0; i < dataPoints.length; i++) {
  (function(i) {
    setTimeout(function() {


     if(end of everything)
     {
      //call xyz()
     }

    }, 5000 * i);
  })(i); 
}

Пожалуйста, помогите мне в достижении моей цели. Спасибо

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

С вашим дизайном вы проверяете, является ли тайм-аут последним.

function xyz() {
  console.log("done");
}
var dataPoints = ["a", "b", "c", "d", "e"]

for (var i = 0; i < dataPoints.length; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i, dataPoints[i])      
      if (i === dataPoints.length - 1) {
        xyz()
      }
    }, 500 * i);
  })(i);
}

Вам лучше использовать очередь

function xyz() {
  console.log("done");
}
var theData = ["a", "b", "c", "d", "e"]

function displayData(dataPoints, done) {
  var iteration = 0
  function next() {
    console.log(dataPoints[iteration])
    iteration++
    if (iteration < dataPoints.length) {
      window.setTimeout(next, 1000)
    } else {
      done()
    }
  }
  next()
}

displayData(theData, xyz)
0 голосов
/ 05 мая 2020

Вы можете просто проверить, является ли i последним индексом массива:

 dataPoints = [1, 2, 3]; 
 for (var i = 0; i < dataPoints.length; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i);

     if(i === dataPoints.length - 1) // if i is the last iteration
     {
      console.log('the end');
      //call xyz()
     }

    }, 1000 * i); // changed 5s to 1s for demo
  })(i); 
}
...