2015-10-06 61 views
1

我試着這樣做:包裝異步週期無極

console.log("start spinner!"); 
for (var i = 0; i < modules.length; ++i) { 
    var filename = modules[i].filename; 
    $.get('./views/templates/'+ filename).done(function(data){ 
      modulesTemplates.push(data); 
      console.log(data); 
     }).fail(); 
} 

如何對於具有回調或承諾包裝這整個週期呢? 我試圖與bluebirdjs,是這樣的:

Promise.all([ modulesTemplates ]) 
     .then(function(data){ 
      console.log(course.modulesTemplates); 
      loadView('home.html'); 
      console.log("stop spinner!"); 
}); 

但它不工作。我是否錯過了一些東西,或者這是一個更好的方法嗎?

的console.logs的順序:

開始微調!
[]
停止微調!
tempalte 1
模板2

+0

你希望所有的請求併發(同時)還是順序的(一個接一個地)? –

+0

sequential以正確的順序加載模板,因爲我想以線性方式加載 –

+0

您以正確的順序加載它們,但仍然同時發出請求。 –

回答

3

隨着藍鳥,假設請求可以在飛行一次,你可以這樣做:

console.log("Start Spinner"); 
Promise.map(modules, function(module){ 
    return $.get('./views/templates/' + module.filename); 
}).then(function(modulesTemplates){ 
    // module template is a list of all the templates loaded here 
    // this code will be reached after all are loaded, for example 
    // modulesTemplates[0] is the first template. 
    console.log("Stop Spinner"); 
}); 
+0

太棒了!謝謝,我想那個.map()比.all() –