Javascript 在for循环内设置超时,获取最终值(等待循环完成)

Javascript 在for循环内设置超时,获取最终值(等待循环完成),javascript,loops,Javascript,Loops,我有一个带有setTimeout功能的for循环: for (var i=0; i < variable; i++) { setTimeout(function() { screenArray.push(takeScreen()); sphere.rotateOnAxis(rotationVector, angle); renderer.render(scene,camera); }, 1); } 我甚至尝试将for循环与一

我有一个带有
setTimeout
功能的for循环:

for (var i=0; i < variable; i++) {
    setTimeout(function() {
        screenArray.push(takeScreen());
        sphere.rotateOnAxis(rotationVector, angle);
        renderer.render(scene,camera);
    }, 1);
}
我甚至尝试将for循环与一个单独的回调函数结合起来,但结果与上面的一样(尽管我可能做得不正确)


我想让它在for循环完成时只记录
screenArray
(这也意味着等待
setTimeout
),但我就是不能让它工作。

所有tiemout完成后,您必须打印数组。试试这个:

var j=0;
for (var i=0; i < variable; i++) {
    setTimeout(function() {
        screenArray.push(takeScreen());
        sphere.rotateOnAxis(rotationVector, angle);
        renderer.render(scene,camera);
        j++;
        if (j == variable) console.log(screenArray);
    }, 1);
}
var j=0;
对于(变量i=0;i
----------
var屏幕捕获=(函数(){
变量screenArray=[];
返回{
环屏:功能(长度){
var计数=0;
var_this=这个;
var intvl=setInterval(函数(){
如果(计数<长度){
_此.captureScreen(计数);
计数++;
}否则{
清除间隔(intvl);
console.log(屏幕阵列);
}
}, 1)
},
captureScreen:功能(val){
screenArray.push(val)
}
}
})()
屏幕截图。环屏(10);

您正在传递
1
作为
设置超时的持续时间
?那是1毫秒,所有的计时器几乎都在同一时间启动。是的,只是
1
。我尝试了更长的时间,甚至达到了10000次,但这并没有改变任何事情。我不知道为什么
1
会起作用(为了延迟截图),但它确实起作用,我现在不想质疑它。谢谢。这是一个简单的解决方案。
var j=0;
for (var i=0; i < variable; i++) {
    setTimeout(function() {
        screenArray.push(takeScreen());
        sphere.rotateOnAxis(rotationVector, angle);
        renderer.render(scene,camera);
        j++;
        if (j == variable) console.log(screenArray);
    }, 1);
}
----------
var screenCapture = (function(){
    var screenArray = [];
    return{
        loopScreen : function(length){
            var count = 0;
            var _this = this;
            var intvl = setInterval(function () {
                if(count < length){
                    _this.captureScreen(count);
                    count++;
                }else{
                    clearInterval(intvl);
                    console.log(screenArray);
                }
            }, 1)

        },
        captureScreen : function(val){
                 screenArray.push(val)
        }


    }

})()
screenCapture.loopScreen(10);