1

我有这个代码:

var getStuff = function(resources, callback, progressCallback){
  var deferreds = [];
  for(var idx = 0; idx < resources.length; idx++){
     ...
     deferreds.push(<some action>);
  }

  jQuery.when.apply(null, deferreds).then(function(){
    callback && callback();
  });
});

因此,如果我调用它,这将触发我的回调:

getStuff([
  'foo',
  'bar'
], function(){
  console.log("Finished doing stuff!");
});

问题是:如何进行progressCallback?

就像是:

getStuff([
  'foo',
  'bar'
], function(){
  console.log("Finished doing stuff!");
}, function(obj){
  console.log("Doing stuff with obj: " + obj);
});

问候!

4

1 回答 1

1

你可以试试这种方法(我没试过)

var getStuff = function(resources, callback, progressCallback) {

    var deferreds = [];
        len       = resources.length; // need a variable for later iteration

    for(var idx = 0; idx < len; idx++){
       deferreds.push(<some action>);
    }


    deferreds.reverse();  // So the order of deferred lookup is preserved

    /* we create a named self-executed function, so we can call it when 
       a deferred is done and len variable is decremented */

    (function iterateWhen() {
       if (len--) {
         /* call progress callback */
         progressCallback(deferreds[len]); 
         jQuery.when(deferreds[len]).then(function() {
            iterateWhen();
         });
       }
       else {     
          callback && callback();
       }
    }());

};
于 2012-04-24T08:53:33.117 回答