在Javascript中通过循环链接回调函数

时间:2014-08-17 05:26:17

标签: javascript callback

我不想再同时预装我的图像,我想一个接一个地加载它们。到现在为止我这样做了:

for (var i = current; i < current + 5; i++) {
    images[i].load();
}

所以我开始考虑如何使用回调顺序加载它们:我可以将回调传递给load(callback),这将在加载一个图像后调用。所以我也可以像这样做,它们将在彼此之后加载:

images[current].load(function(){
    images[current + 1].load(function(){
        images[current + 2].load(function(){
            images[current + 3].load(function(){
                images[current + 4].load();
            });
        });
    });
});

这很有效,但我很乐意把它变成一个循环。我无法扭曲我的头脑来实现这一目标。你能帮忙吗?


我只能提供我的load(callback)方法的示例,因为它太长了:

load = function(callback){
    // do preloading things and simulate load event:
    setTimeout(function(){
        callback.apply(this);
    }, 1000);
} 

这是测试它的小提琴:http://jsfiddle.net/ajuc7g1q/1/

2 个答案:

答案 0 :(得分:1)

可能是一个递归函数?

function loadImages(){
  var images = [img1, img2, ...];
  loadImage(images);

}

function loadImage(images){
  if(images.length){
      images.shift().load(function(){
          loadImage(images);
      });
  }
}

<强> Demo

答案 1 :(得分:0)

我只是想出了如何递归地做到这一点:

var call_chain = function(){};

for(var i = current + 5; i >= current; i--){
    (function(f, index){
        call_chain = function(){
            images[index].load(f);
        };
    })(call_chain, i);
}

call_chain();