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 に答える