我想在JavaScript的for循环中检测一个异步函数的结束。
我的代码是
for (var i = 0; i < dataPoints.length; i++) {
(function(i) {
setTimeout(function() {
if(end of everything)
{
//call xyz()
}
}, 5000 * i);
})(i);
}
请帮助我实现我的目标。谢谢你的帮助
你可以直接检查是否 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);
}
根据你的设计,你要检查超时是否是最后一个。
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)