2012-04-24 34 views
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); 
}); 

商祺!

回答

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(); 
     } 
    }()); 

}; 
+0

謝謝!只是在你的代碼中的一個小錯誤:它應該是「len--」而不是「--len」。但無論如何,這工作完美:) – alexandernst 2012-04-24 09:01:39

+0

更新與'len - ',謝謝 – fcalderan 2012-04-24 09:03:34