检测JavaScript中for循环中异步函数的结束。

问题描述 投票:0回答:2

我想在JavaScript的for循环中检测一个异步函数的结束。

我的代码是

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


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

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

请帮助我实现我的目标。谢谢你的帮助

javascript for-loop asynchronous settimeout
2个回答
0
投票

你可以直接检查是否 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); 
}

0
投票

根据你的设计,你要检查超时是否是最后一个。

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)
© www.soinside.com 2019 - 2024. All rights reserved.